Skip to content

Commit 12ea16d

Browse files
Add files via upload
1 parent edc056d commit 12ea16d

File tree

2 files changed

+259
-0
lines changed

2 files changed

+259
-0
lines changed

temp/command.py

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
# importing chipy module
2+
from pylmgc90 import chipy
3+
4+
# Initializing
5+
chipy.Initialize()
6+
7+
# checking/creating mandatory subfolders
8+
chipy.checkDirectories()
9+
10+
# logMes
11+
# chipy.utilities_DisableLogMes()
12+
13+
#
14+
# defining some variables
15+
#
16+
17+
# space dimension
18+
dim = 3
19+
20+
# modeling hypothesis ( 1 = plain strain, 2 = plain stress, 3 = axi-symmetry)
21+
mhyp = 0
22+
23+
# time evolution parameters
24+
dt = 1e-3
25+
nb_steps = 100
26+
27+
# theta integrator parameter
28+
theta = 0.5
29+
30+
# interaction parameters
31+
Rloc_tol = 5.e-2
32+
33+
# nlgs parameters
34+
tol = 1.666e-4
35+
relax = 0.1
36+
#you can consider using relax = 1./4. to have a symmetrical solution
37+
norm = 'QM/16'
38+
gs_it1 = 50
39+
gs_it2 = 500
40+
solver_type='Stored_Delassus_Loops '
41+
42+
# write parameter
43+
freq_write = 1
44+
45+
# display parameters
46+
freq_display = 1
47+
48+
chipy.nlgs_3D_DiagonalResolution()
49+
50+
#chipy.PRPRx_SetCundallNeighbor(1e-1)
51+
chipy.PRPRx_UseCpCundallDetection(200)
52+
chipy.PRPRx_LowSizeArrayPolyr(10)
53+
#chipy.PRPRx_VerboseF2F(9,10)
54+
#
55+
# read and load
56+
#
57+
58+
# Set space dimension
59+
chipy.SetDimension(dim,mhyp)
60+
#
61+
chipy.utilities_logMes('INIT TIME STEPPING')
62+
chipy.TimeEvolution_SetTimeStep(dt)
63+
chipy.Integrator_InitTheta(theta)
64+
#
65+
chipy.ReadDatbox(deformable=False)
66+
67+
#
68+
# open display & postpro
69+
#
70+
71+
chipy.utilities_logMes('DISPLAY & WRITE')
72+
chipy.OpenDisplayFiles()
73+
chipy.OpenPostproFiles()
74+
75+
#
76+
# simulation part ...
77+
#
78+
79+
# ... calls a simulation time loop
80+
# since constant compute elementary mass once
81+
chipy.utilities_logMes('COMPUTE MASS')
82+
chipy.ComputeMass()
83+
84+
for k in range(0,nb_steps):
85+
#
86+
chipy.utilities_logMes('INCREMENT STEP')
87+
chipy.IncrementStep()
88+
89+
chipy.utilities_logMes('COMPUTE Fext')
90+
chipy.ComputeFext()
91+
chipy.utilities_logMes('COMPUTE Fint')
92+
chipy.ComputeBulk()
93+
chipy.utilities_logMes('COMPUTE Free Vlocy')
94+
chipy.ComputeFreeVelocity()
95+
96+
chipy.utilities_logMes('SELECT PROX TACTORS')
97+
chipy.SelectProxTactors()
98+
99+
chipy.utilities_logMes('RESOLUTION' )
100+
chipy.RecupRloc(Rloc_tol)
101+
102+
chipy.ExSolver(solver_type, norm, tol, relax, gs_it1, gs_it2)
103+
chipy.UpdateTactBehav()
104+
105+
chipy.StockRloc()
106+
107+
chipy.utilities_logMes('COMPUTE DOF, FIELDS, etc.')
108+
chipy.ComputeDof()
109+
110+
chipy.utilities_logMes('UPDATE DOF, FIELDS')
111+
chipy.UpdateStep()
112+
113+
chipy.utilities_logMes('WRITE OUT')
114+
chipy.WriteOut(freq_write)
115+
116+
chipy.utilities_logMes('VISU & POSTPRO')
117+
chipy.WriteDisplayFiles(freq_display)
118+
chipy.WritePostproFiles()
119+
120+
#
121+
# close display & postpro
122+
#
123+
chipy.CloseDisplayFiles()
124+
chipy.ClosePostproFiles()
125+
126+
# this is the end
127+
chipy.Finalize()

temp/gen_dem_vault.py

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
from compas_dem.templates import BarrelVaultTemplate
2+
from compas_dem.elements import Block
3+
from compas_dem.models import BlockModel
4+
from compas.colors import Color
5+
import numpy as np
6+
from compas_viewer import Viewer
7+
8+
from compas_lmgc90 import _lmgc90
9+
10+
11+
import os, sys
12+
13+
if not os.path.isdir('./DATBOX'):
14+
os.mkdir('./DATBOX')
15+
16+
# import des modules
17+
import math, numpy
18+
from pylmgc90 import pre
19+
20+
# definition des conteneurs:
21+
# * de corps
22+
bodies = pre.avatars()
23+
# * de materiaux
24+
mats = pre.materials()
25+
mods = pre.models()
26+
# * de lois de contacts
27+
tacts = pre.tact_behavs()
28+
# * de tables de visibilite
29+
svs = pre.see_tables()
30+
31+
# exemple 3D
32+
dim = 3
33+
34+
# definition d'un modele rigide
35+
mR3D = pre.model(name='rigid', physics='MECAx',
36+
element='Rxx3D', dimension=dim)
37+
mods.addModel(mR3D)
38+
39+
# definition du materiau pour les blocs
40+
stone = pre.material(name='STONE', materialType='RIGID',
41+
density=2750.)
42+
# ajout des materiaux dans le conteneur
43+
mats.addMaterial(stone)
44+
45+
46+
47+
# =============================================================================
48+
# Block Geometry
49+
# =============================================================================
50+
51+
arch = BarrelVaultTemplate(span=10,length=4,thickness=0.2,vou_span=20,vou_length=4,rise=3)
52+
#arch = BarrelVaultTemplate()
53+
54+
# =============================================================================
55+
# Block Model
56+
# =============================================================================
57+
58+
model = BlockModel()
59+
for block in arch.blocks():
60+
block = Block.from_mesh(block)
61+
model.add_element(block)
62+
63+
for element in model.elements():
64+
65+
v=[]
66+
f=[]
67+
68+
v=[element.geometry.vertex_coordinates(vkey) for vkey in element.geometry.vertices()]
69+
cnt=[element.geometry.face_vertices(fkey) for fkey in element.geometry.faces()]
70+
#t3 face
71+
for p in cnt :
72+
f.append(p[:-1])
73+
f.append([p[0],p[2],p[3]])
74+
print(f)
75+
76+
npv=numpy.zeros([len(v), 3],dtype=np.float64)
77+
for i,c in enumerate(v):
78+
npv[i,:] = c
79+
print(npv)
80+
81+
npf=numpy.zeros([len(f), 3],dtype=np.int32)
82+
for i,t3 in enumerate(f):
83+
npf[i,:] = t3
84+
npf[i,:]+=1
85+
print(npf)
86+
87+
# creation d'un nouvel avatar rigide pour le bloc
88+
89+
if element.point.z < 0.31 :
90+
b = pre.rigidPolyhedron(model=mR3D, material=stone, generation_type='full',\
91+
vertices=npv, faces=npf, color='GRND_')
92+
b.imposeDrivenDof(component=[1,2,3,4,5,6], dofty='vlocy')
93+
else:
94+
b = pre.rigidPolyhedron(model=mR3D, material=stone, generation_type='full',\
95+
vertices=npv, faces=npf, color='REDxx')
96+
97+
# ajout du bloc a l'ensemble des corps
98+
bodies.addAvatar(b)
99+
100+
# definition d'une loi de contact frottant, avec pre-gap
101+
iqs=pre.tact_behav(name='iqsc0', law='IQS_CLB', fric=0.5)
102+
# ajout de la loi dans le conteneur de lois
103+
tacts.addBehav(iqs)
104+
105+
# definition d'une table de visibilite pour le
106+
# contact polyedre-polyedre (i.e. entre blocs)
107+
sv1 = pre.see_table(CorpsCandidat='RBDY3', candidat='POLYR', colorCandidat='REDxx',\
108+
CorpsAntagoniste='RBDY3', antagoniste='POLYR', colorAntagoniste='REDxx',\
109+
behav=iqs, alert=1e-3)
110+
# ajout de la table de visibilite dans le conteneur
111+
# de tables de visibilite
112+
svs.addSeeTable(sv1)
113+
114+
sv2 = pre.see_table(CorpsCandidat='RBDY3', candidat='POLYR', colorCandidat='REDxx',\
115+
CorpsAntagoniste='RBDY3', antagoniste='POLYR', colorAntagoniste='GRND_',\
116+
behav=iqs, alert=1e-3)
117+
# ajout de la table de visibilite dans le conteneur
118+
# de tables de visibilite
119+
svs.addSeeTable(sv2)
120+
121+
post = pre.postpro_commands()
122+
nlgs = pre.postpro_command(name='SOLVER INFORMATIONS', step=1)
123+
post.addCommand(nlgs)
124+
125+
# ecriture des fichiers de donnees pour LMGC90
126+
pre.writeDatbox(dim, mats, mods, bodies, tacts, svs, post=post)
127+
128+
try:
129+
pre.visuAvatars(bodies)
130+
except:
131+
pass
132+

0 commit comments

Comments
 (0)