Commit 6d011e73 authored by Dorchies David's avatar Dorchies David
Browse files

Improvement of mkdocs to pdf conversion

parent 6dffa193
......@@ -6,8 +6,7 @@
/out-tsc
/src/assets/docs-*
/compodoc-fr
cassiopee_doc-fr.md
cassiopee_doc-fr.md.tex
/docs-fr_pdf
# /release has a specific .gitignore
# dependencies
......
......@@ -11,10 +11,8 @@ This can be done from the command line:
The documentation of Cassiopee needs to install MkDocs and some extensions:
```sh
sudo apt install python3-pip
python3 -m pip install mkdocs
python3 -m pip install python-markdown-math
python3 -m pip install mkdocs-material
sudo apt install python3-pip python3-setuptools
python3 -m pip install mkdocs python-markdown-math mkdocs-material
```
### Install the necessary packages of the library:
......@@ -272,4 +270,11 @@ Cordova embeds the whole app in a Web view, allowing it to run on mobile devices
Run Android Studio, click "configure > SDK manager". Install at least one SDK, for ex. 7.0 Nougat.
Build .apk package with `npm run release-android`. Find the generated package in `/release`.
# Create PDF from documentation
```sh
sudo apt-get install texlive texlive-lang-french texlive-latex-extra pandoc
```
\ No newline at end of file
# Relation analytique pour le calcul direct des pertes de charge en conduite distribuant un débit de façon homogène établi à partir de la formule de Blasius.
# Conduite distributrice
Relation analytique pour le calcul direct des pertes de charge en conduite distribuant un débit de façon homogène établi à partir de la formule de Blasius.
## Hypothèses
![Schéma conduite](cond_distri.png)
On suppose une conduite de longueur \(L\), diamètre intérieur \(D\), avec un débit en tête \(Q\). On calcule la perte de charge \(\Delta H\) entre les 2 extrémités de la conduite. Dans une section de débit \(q\) constant, on évalue le coefficient de frottement avec la formule de Blasius, valide pour des nombres de Reynolds modérés pour des parois lisses:
$$\lambda \simeq a Re^{-0.25}$$
## Développement analytique
On note \(x\) la position depuis l'aval de la conduite. Le débit est supposé varier linéairement avec \(x\), et s'écrit alors:
$$q(x)=Q x/L$$
Notons \(S=\pi D^2/4\) la surface intérieure de la conduite.
On obtient la perte de charge en intégrant la relation de Darcy-Weisbach:
$$\Delta H=\int_{x=0}^{L} a Re^{-0.25} \frac{u^2(x)}{2gD}dx$$
Notons \(\nu\) la viscosité cinématique. On remplace alors \(Re\) par \(u D/\nu\), ce qui donne
$$\Delta H=\int_{x=0}^{L} a u(x)^{-0.25}D^{-0.25}\nu ^{0.25} \frac{u^2(x)}{2gD}dx$$
En réarrangeant, on obtient:
$$\Delta H=\int_{x=0}^{L} a \nu ^{0.25} \frac{u^{1.75}(x)}{2gD^{1.25}}dx$$
Utilisons l'équation du débit pour faire apparaître le débit ($u(x)=q(x)/S$):
$$\Delta H=\int_{x=0}^{L} a \nu ^{0.25} \frac{(Qx/(LS))^{1.75}}{2gD^{1.25}}dx$$
puis le diamètre \(D\) :
$$\Delta H=\int_{x=0}^{L} a \nu ^{0.25} \frac{(4Qx/(L\pi D^2))^{1.75}}{2gD^{1.25}}dx$$
On réarrange pour obtenir
$$\Delta H=a \nu ^{0.25} \frac{(4/\pi)^{1.75}Q^{1.75}}{2g D^{4.75}} \int_{x=0}^{L} (x/L)^{1.75}dx$$
En intégrant, on obtient
$$\Delta H=a \nu ^{0.25} \frac{(4/\pi)^{1.75}Q^{1.75}}{2g D^{4.75}}\frac{L}{2.75}$$
$$\Delta H=a \nu ^{0.25} \frac{4^{1.75}}{5.5g \pi^{1.75}}\frac{Q^{1.75}L}{D^{4.75}}$$
## Application numérique
......
# Pertes de charge dans une conduite circulaire : abaques de Lechapt et Calmon
# Lechapt et Calmon
Pertes de charge dans une conduite circulaire : abaques de Lechapt et Calmon
La formule de Lechapt et Calmon est basée sur des ajustements de la formule de [Cyril Frank Colebrook](http://fr.wikipedia.org/wiki/Cyril_Frank_Colebrook) :
......
# Cloisons
Cet outil qui est similaire à celui des [Lois d'ouvrages](lois_ouvrages.md), est une aide au prédimensionnement hydraulique d'une passe à bassins : il
Cet outil qui est similaire à celui des [Lois d'ouvrages](../structures/lois_ouvrages.md), est une aide au prédimensionnement hydraulique d'une passe à bassins : il
est utilisé le plus souvent pour le dimensionnement des échancrures, fentes, orifices
caractérisant les cloisons d'une passe ainsi que pour le calage en altitude des échancrures,
fentes et radier du bassin amont d'une passe.
......
......@@ -21,7 +21,7 @@ $$ E_c = \frac{V^2}{2g} $$
avec \(E_c\) l'énergie cinétique amont en mètres, et \(g\) l'accélération de la pesanteur (9.81 m.s<sup>-2</sup>).
Le facteur correctif \(C_v\) dépend du rapport de \( \frac{\sum{A^*}}{A_1} \) où \(A_1\) est la section d'écoulement en amont du déversoir \(L \times (Z_1 - Z_{lit})\) et \(\sum{A^*}\) la somme des aires fictives d'écoulement au niveau des sections de contrôle (les profondeurs correspondent aux charges \(h\) sur les différents déversoirs).
Le facteur correctif \(C_v\) dépend du rapport de \(\frac{\sum{A^*}}{A_1}\) où \(A_1\) est la section d'écoulement en amont du déversoir \(L \times (Z_1 - Z_{lit})\) et \(\sum{A^*}\) la somme des aires fictives d'écoulement au niveau des sections de contrôle (les profondeurs correspondent aux charges \(h\) sur les différents déversoirs).
Pour les déversoirs rectangulaires :
......@@ -35,11 +35,11 @@ avec \(b\) la largeur de la lame déversante et \(Z_d\) la cote de la crête du
Le facteur correctif \(C_v\) est interpolé selon les valeurs du tableau suivant :
| \( \frac{\sum{A^*}}{A_1} \) | 0 | 0.1 | 0.2 | 0.3 | 0.4 |
| \(\frac{\sum{A^*}}{A_1}\) | 0 | 0.1 | 0.2 | 0.3 | 0.4 |
| :---- | :----: | :----: | :----: | :----: | :----: |
| \(C_v\) | 1.000 | 1.005 | 1.015 | 1.022 | 1.035 |
| \( \frac{\sum{A^*}}{A_1} \) | 0.5 | 0.6 | 0.7 | 0.8 |
| \(\frac{\sum{A^*}}{A_1}\) | 0.5 | 0.6 | 0.7 | 0.8 |
| :---- | :----: | :----: | :----: | :----: |
| \(C_v\) | 1.065 | 1.090 | 1.140 | 1.210 |
......@@ -21,9 +21,7 @@ Le module calcule le paramètre demandé et affiche pour chaque ouvrage présent
Pour la définition du type de jet (plongeant ou de surface), voir&nbsp;: Larinier, M., 1992. Passes à bassins successifs, prébarrages et rivières artificielles. Bulletin Français de la Pêche et de la Pisciculture 45–72. <https://doi.org/10.1051/kmae:1992005>.
![Schéma du type de jet][type_de_jet]
[type_de_jet]: type_de_jet.png "Extrait de Larinier (1992)"
![Schéma du type de jet](type_de_jet.png)
*Extrait de Larinier, M., 1992. Passes à bassins successifs, prébarrages et rivières artificielles. Bulletin Français de la Pêche et de la Pisciculture 45–72. <https://doi.org/10.1051/kmae:1992005>*
......
#! /bin/python3
# Combine tous les fichiers markdown de la documentation en un seul fichier
# Usage :
# python3 ./mkdocs-combine.py > cassiopee_doc-fr.md
# Pour la conversion au format tex :
# pandoc cassiopee_doc-fr.md -o cassiopee_doc-fr.md.tex
import yaml
sYAML = 'mkdocs.yml'
f = open(sYAML, 'r')
with f:
try:
dMkdocsYaml = yaml.load(f)
bOK = True
except yaml.YAMLError as e:
print("YAML loading {}: {}".format(sYAML, str(e)))
print("YAML loaded {}".format(sYAML))
def explore(docs_dir, nav, output = ''):
import os, re
if type(nav) is str:
nav = [nav]
for d in nav:
if type(d) is str:
filepath = os.path.join(docs_dir,d)
f = open(filepath, 'r')
path = os.path.dirname(filepath)
s = f.read() + "\n"
s = re.sub(r'(\!\[.+\]\()(.+)(\))', r'\1'+path+r'/\2\3', s)
s = re.sub(r'(\\\()(.+?)(\\\))', r'$\2$', s)
output +=s
elif type(d) is dict:
for key, value in d.items():
print(key)
output = explore(docs_dir, value, output)
return output
s = explore(dMkdocsYaml['docs_dir'], dMkdocsYaml['nav'])
print(s)
......@@ -16,27 +16,26 @@ nav:
- index.md
- general/principe_fonctionnement.md
- general/parametres_application.md
- Modules de calcul:
- Hydraulique en charge:
- Lechapt et Calmon: calculators/hyd_en_charge/lechapt-calmon.md
- Conduite distributrice: calculators/hyd_en_charge/cond_distri.md
- Hydraulique à surface libre:
- calculators/hsl/regime_uniforme.md
- Lois d'ouvrages:
- calculators/structures/lois_ouvrages.md
- calculators/structures/dever.md
- Cloisons: calculators/pab/cloisons.md
- Equations d'ouvrages:
- calculators/structures/kivi.md
- calculators/structures/orifice_noye.md
- calculators/structures/fente_noyee.md
- Passes à bassins:
- Puissance dissipée: calculators/pab/volume.md
- Dimensions: calculators/pab/dimensions.md
- Cloisons: calculators/pab/cloisons.md
- Passe à bassins: calculators/pab/pab.md
- Passes à macro-rugosité:
- calculators/pam/macrorugo.md
- calculators/pam/macrorugo_theorie.md
- Hydraulique en charge:
- calculators/hyd_en_charge/lechapt-calmon.md
- calculators/hyd_en_charge/cond_distri.md
- Hydraulique à surface libre:
- calculators/hsl/regime_uniforme.md
- Lois d'ouvrages:
- calculators/structures/lois_ouvrages.md
- calculators/structures/dever.md
- Cloisons: calculators/pab/cloisons.md
- Equations d'ouvrages:
- calculators/structures/kivi.md
- calculators/structures/orifice_noye.md
- calculators/structures/fente_noyee.md
- Passes à bassins:
- Puissance dissipée: calculators/pab/volume.md
- Dimensions: calculators/pab/dimensions.md
- Cloisons: calculators/pab/cloisons.md
- Passe à bassins: calculators/pab/pab.md
- Passes à macro-rugosité:
- calculators/pam/macrorugo.md
- calculators/pam/macrorugo_theorie.md
- CHANGELOG.md
- mentions_legales.md
#! /bin/python3
# Combine tous les fichiers markdown de la documentation en un seul fichier
# Usage :
# python3 ./mkdocs-combine.py > cassiopee_doc-fr.md
# Pour la conversion au format tex :
# pandoc cassiopee_doc-fr.md -o cassiopee_doc-fr.md.tex
outputDir = 'docs-fr_pdf'
filename = 'cassiopee_docs-fr'
def readConfig(sYAML):
f = open(sYAML, 'r')
with f:
try:
import yaml
dMkdocsYaml = yaml.load(f, Loader=yaml.SafeLoader)
except yaml.YAMLError as e:
import sys
sys.exit("ERROR on YAML loading {}: {}".format(sYAML, str(e)))
return dMkdocsYaml
def getMdHeader(title, level):
return "#" * level + " " + title + "\n"
def shiftMdHeaders(mdContent, level):
import re
if level == 0:
return mdContent
lMd = mdContent.splitlines()
for i, item in enumerate(lMd):
if len(item) > 0 :
if item[0] == "#":
lMd[i] = ("#" * level) + item
return "\n".join(lMd)
def explore(docs_dir, nav, output = '', level = 0):
"""
@param docs_dir path to the mkdocs content files
@param dictionnary with the structure to explore
@param output markdown files content already merged
"""
import os, re
if type(nav) is str:
nav = [nav]
for d in nav:
if type(d) is str:
filepath = os.path.join(docs_dir, d)
f = open(filepath, 'r')
path = os.path.join('..', os.path.dirname(filepath))
s = f.read() + "\n"
# Modification of image and links paths
s = re.sub(r'(\!\[.+\]\()(.+)(\))', r'\1'+path+r'/\2\3', s)
s = re.sub(r'(\\\()(.+?)(\\\))', r'$\2$', s)
s = shiftMdHeaders(s, level)
output += "\n" + s
elif type(d) is dict:
level += 1
for key, value in d.items():
if type(value) is list:
output += "\n" + getMdHeader(key, level) + "\n"
output = explore(docs_dir, value, output, level)
level -= 1
return output
if __name__ == '__main__':
# Read config
dMkdocsYaml = readConfig('mkdocs.yml')
# Create string with merged MarkDown
s = explore(dMkdocsYaml['docs_dir'], dMkdocsYaml['nav'])
# Save the md file
import os
os.makedirs(outputDir, exist_ok=True)
OutputPath = os.path.join(outputDir, filename)
with open('{}.md'.format(OutputPath), 'w') as f:
f.writelines(s)
# Convert to tex format
os.system(
'pandoc {0}.md -f markdown -t latex -s -o {0}.tex'.format(OutputPath)
)
# Remove header of tex file
bContent = False
ls = []
with open('{}.tex'.format(OutputPath), 'r') as f:
for line in f:
if line.strip() == '\\end{document}':
bContent = False
exit
if bContent:
ls.append(line)
if line.strip() == '\\begin{document}':
bContent = True
for i, line in enumerate(ls):
ls[i] = line.replace('\\includegraphics', '\\includegraphics[max size={\\textwidth}{0.9\\textheight}]')
with open('{}.tex'.format(OutputPath), 'w') as f:
f.writelines(ls)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment