Verifiche e output personalizzati

Se il codice di design preferito non è incluso in NextFEM Designer o è necessario utilizzare le proprie relazioni per il controllo, è possibile utilizzare il motore di scripting NextFEM.

La sintassi è molto semplice e diretta, puoi persino copiare le tue formule da un foglio di calcolo poiché sono supportate le funzioni matematiche più comuni.

Lo script deve essere caricato nella finestra Verifica ( comando Risultati / Verifiche ... ); per fare ciò, creare un file di testo e inserirlo nella sottocartella "verifica" nella directory di installazione del programma (in genere è C: \ Programmi \ NextFEM \ NextFEM Designer \ verification ).

Il file deve avere l'estensione. nvv per essere letto automaticamente e per apparire nell'elenco a discesa come sotto.

Puoi anche modificare il tuo script nell'area di testo della finestra di verifica, oppure puoi modificare il file al di fuori del programma.

Editing degli script

Raccomandiamo un editor con evidenziazione della sintassi per scrivere il tuo script, come Notepad ++ ( notepad-plus-plus.org/ ).

È possibile trovare un'impostazione per l'evidenziazione della sintassi per Notepad ++ nella cartella " verifica " ( NextFEMVerifications.xml ). Da dentro Notepad ++, può essere caricato con il comando Language / Define your language ... e facendo clic su Importa ... . Quindi, troverai la voce " NextFEMVerifications " nel menu a tendina in alto. Inoltre, nella scheda Elenchi di parole chiave , puoi vedere tutti i comandi supportati per lo scripting che saranno evidenziati durante la modifica.

Apri lo script di esempio chiamato " trusses.nvv " fornito con il programma, nella cartella "verifica".

Le poche righe contenute sono autoesplicative. Nota la parola chiave " unitconv " per convertire le unità (" model_S " rappresenta le unità di stress correnti nel modello), il carattere @ per creare una colonna come output e la struttura if (condition, true, false) .

In questo tutorial, vedremo gradualmente come sviluppare uno script più complesso in grado di soddisfare le tue esigenze.

Utilizzare i blocchi

Il motore di controllo supporta l'esecuzione del codice in blocchi. Ogni blocco è delimitato dagli identificatori come nell'esempio seguente e deve essere denominato con un numero in virgola mobile ( ad esempio, 0,6).

$$ 0.6

# questo è un commento - siamo all'interno del blocco chiamato 0.6

# il blocco denominato 1.0 verrà eseguito solo se la variabile SecType è uguale a 1 (==)

execif ( SecType == 1,1.0)

$!

 

Per chiamare ciascun blocco per l'esecuzione, sono disponibili le seguenti parole chiave:

-           exec (0.6) : esegue il blocco di codice denominato 0.6

-           execif (condizione, 0.6) : esegue il blocco di codice denominato 0.6 è condizione è vera.

 

Personalizzazione dell'output

L'output proveniente dal tuo codice è organizzato in colonne contenenti numeri o valori booleani (vero o falso). Per dichiarare una colonna, utilizzare il carattere @ prima del nome della colonna, scrivere la quantità di output nella riga seguente. Per esempio:

@ MomentCheck

MEd / MRd

 

Questo creerà una colonna denominata " MomentCheck " e inserirà il valore risultante dall'espressione MEd / MRd nella riga corrispondente al nodo o all'elemento da verificare.

Esempio di script

Le variabili non devono essere dichiarate; semplicemente inizializzali con un valore o un'espressione . Per esempio:

# resistenza allo snervamento di progetto 391.3 MPa

fyd = 391.3

# Altezza sezione 500 mm

h = 450

# Copriferro 50 mm

c = 50

# 628 mm2 barre inferiori – 2f20

AsInf = 400

# 308 mm2 barre superiori – 2f14

AsSup = 280

# 20x10 ^ 6 Nmm = 20.0 kNm - Momento di design  (oppure preso dai risultati del calcolo)

Med = 2.0E7

 

Per impostazione predefinita, tutte le variabili sono doppie, ma puoi sempre usarle come tipo inferiore:

# variabile utilizzata come booleano : 1 è vero, 0 è falso

positiveMoment = if (MEd> = 0,1,0)


Vediamo in azione un semplice script per stimare l'area dell'armatura necessaria in una trave di calcestruzzo. I blocchi possono essere inseriti liberamente su qualsiasi riga del codice.

# resistenza allo snervamento di progetto 391.3 MPa

fyd = 391.3

# Altezza sezione 500 mm

h = 450

# Copriferro 50 mm

c = 50

# 628 mm2 barre inferiori – 2f20

AsInf = 400

# 308 mm2 barre superiori – 2f14

AsSup = 280

# 20x10 ^ 6 Nmm = 20.0 kNm  - Momento di design (oppure preso dai risultati del calcolo)

Med = 2.0E7

 

# variabile utilizzata come booleano : 1 è vero, 0 è falso

positiveMoment = if (MEd> = 0,1,0)

 

# chiama la funzione 5.0

exec (5.0)

 

# chiamata a funzioni condizionali: positiveMoment è true, quindi verrà chiamato 2.0

execif (not ( positiveMoment ), 1.0)

execif (positivoMomento, 2.0)

 

# Stima del momento di resistenza negativa

$$1.0

  MRd = -0.9 * d * fyd * AsSup

  minArea = MEd / (- 0.9 * d * fyd )

$!

 

# Stima del momento di resistenza positiva

$$2.0

  MRd = 0.9 * d * fyd * AsInf

  minArea = MEd / (0.9 * d * fyd )

$!

 

# calcola l'altezza della sezione effettiva

$$5.0

d = h-c

$!

 

@MomentCheck

MEd / MRd

@_MinimumNeededArea

minArea

 

Per iniziare, devi avere risultati nel nostro modello, altrimenti il ​​controllo non verrà eseguito.

Prima di tutto, copia lo script di esempio nella casella di testo. Quindi scegli il set di dati che ti serve nel primo menu a discesa ( Risultati elemento ) e il numero di stazioni ( Usa 3 stazioni ). Per vedere tutti i valori per gli elementi dati per difetto, si prega di controllare il riferimento di script nel capitolo 4 del manuale utente .

Infine premi Esegui verifiche, la tabella a sinistra verrà popolata con 3 righe per ogni elemento.

 

Colonne evidenziate

Se una colonna contiene valori superiori a 1, l'intera riga verrà automaticamente evidenziata in rosso.

Prova ad aggiungere il seguente codice allo script precedente:

@Area1

minArea

 

Se si preme il pulsante " Ricarica i controlli salvati ", il programma comprimerà le righe utilizzando il massimo per ciascun elemento.

Per evitare l’evidenziazione in una determinata colonna, la dichiareremo con “@_”. Per esempio:

@_Area1

minArea

 

Dimensionamento di membrature in calcestruzzo

Utilizzando alcuni comandi speciali, è possibile dimensionare le membrature in cls aggiungendo armature longitudinali e a taglio sulla base delle relazioni personalizzate.

Di seguito, è possibile trovare uno script per dimensionare le travi di cls calcolando l'area di taglio necessaria sotto puro comportamento alla flessione.

# dimensionamento dell'armatura in una parte della trave di un diaframma rigido : eliminare tutta l'armatura nell'elemento corrente

clearRebar

# resistenza della barra per cemento armato fydL

fydl = unitconv (MPa, model_S, 391.3)

# resistenza della staffa

fyds = fydl

# momento del progetto: prendere il massimo e il minimo sul raggio

Mpos = MmaxZ

Mneg = MminZ

 

# impostare il copriferro a 40 mm

c = unitconv (mm, model_L, 40)

# calcola l'altezza della sezione effettiva

d = hc

 

# stimare l'area della barra di armatura per i momenti di progetto

AsTop = max (abs ( Mpos ) / (0.9 * d * fydl ), 0.0013 * b * d)

AsBot = max (abs ( Mneg ) / (0.9 * d * fydl ), 0.0013 * b * d)

 

# inserisce l'armatura nel modello: trova il diametro della barra per 3 barre in basso e 3 in alto

nBars = 3

TopD = getBarDiam ( AsTop / nBars )

BotD = getBarDiam ( AsBot / nBars )

TopArea = pi * TopD ^ 2/4

TopArea = unitconv (mm ^ 2, model_L ^ 2, TopArea)

BotArea = pi * BotD ^ 2/4

BotArea = unitconv (mm ^ 2, model_L ^ 2, BotArea)

 

# staffe D = 8mm

stirrArea = unitconv (mm ^ 2, model_L ^ 2,50)

stirrSpac = unitconv (mm, model_L, 150)

 

# ciclo per barre

i = 1

xdim = (b-2 * c) / (nBars-1)

execwhile ( i <= nBars, 1.0)

 

$$ 1.0

# ID materiale design per barre = 2

# X coord ., Y coord ., Bar area, design material ID, Linit [0,1), Lend (0,1]

# superiore

    addRebarL ( c + xdim * (i-1), hc, TopArea, 2,0,1)

# parte inferiore

    addRebarL ( c + xdim * (i-1), c, BotArea, 2,0,1)

# rinforzi di taglio

# gambe in Y, gambe in Z, area barra, spaziatura, materiale design ID = 2, Linit [0,1), Lend (0,1]

    addStirrups (2, 2, stirrArea , stirrSpac , 2, 0,1)

i = i + 1

$!

 

Il codice soprastante stima l'area dell'armatura necessaria per resistere al momento flettente attorno all'asse della sezione principale. Le istruzioni da aggiungere tondo per barre a travi sono:

o     addRebar : aggiunge l'armatura longitudinale all'elemento corrente.
Uso: addRebar ( zCoord , yCoord , rebarArea , design material ID, startAt [0,1), endAt (0,1]).
Esempio: addRebarL (40,40,201,0,2,0,1)
aggiunge una barra dell'area 201.0 alla posizione 40, 40 dall'angolo in basso a sinistra della sezione, per l'intero elemento.

o     addStirrups : aggiunge staffe all'elemento corrente.
Uso: addStirrups (gambe in Y, gambe in Z, area barra singola, spaziatura, ID materiale di progetto, startAt [0,1), endAt (0,1]).
Esempio: addStirrups (2, 2, 50.0, 200, 2, 0,1)
aggiunge staffe 2x2 braccia, ciascuna di area 50.0, a 200 di spaziatura, per l'intero elemento.

o     clearRebar : cancella tutte le barre di armatura, inclusi i tirrups, nell'elemento corrente.

o     getBarDiam : ottiene il diametro minimo di una barra longitudinale richiesta per soddisfare l'area specificata. L'uscita è in mm. Esempio: getBarDiam (2.01) # per un modello in cm, restituisce 16.

o     getStirrupDiam : ottiene il diametro minimo di una staffa necessaria per soddisfare l'area specificata. L'uscita è in mm. Esempio: getStirrupDiam (0.5) # per un modello in cm, restituisce 8.

 TranslateMomentYY e TranslateMomentZZ

Come richiede la normativa (EC2 6.2.2(5) e 6.2.3(7)), a causa del comportamento fragile del calcestruzzo e alla formazione di fessure diagonali, è necessario effettuare la verifica di resistenza di una sezione usando un valore aumentato della forza di trazione sulle barre tese.

Nella pratica della procedura di verifica strutturale, ciò equivale ad effettuare una traslazione del diagramma dell’inviluppo del momento flettente, scegliendo la combinazione più penalizzante delle sollecitazioni. Questa distanza di traslazione è funzione dell’inclinazione dei puntoni di calcestruzzo e dell’altezza utile della sezione.

Per ottenere il valore traslato del momento sollecitante da usare in uno script di verifica per NextFEM Designer, si possono usare le funzioni TranslateMomentYY e TranslateMomentZZ:

# Produce le variabili Mzzmax, Mzzmin

TranslateMomentZZ(deltaZZ,position)

# Produce le variabili Myymax, Myymin

TranslateMomentYY(deltaYY,position)

 

I parametri in ingresso richiesti sono:

-          deltaZZ: la distanza di traslazione lungo la linea d’asse per il momento attorno a Z

-          deltaYY:                la distanza di traslazione lungo la linea d’asse per il momento attorno a Y

-          position:                la posizione in corrispondenza della quale si vogliono ottenere i valori del diagramma momento traslato. Misurata dal nodo I lungo la linea d’asse

 

Le due funzioni creano rispettivamente le variabili Mzzmax, Mzzmin, Myymax e Myymin che contengono i valori massimi e minimi, per la posizione data, dei diagrammi traslati.

 

Se l’elemento oggetto di verifica fa parte di una membratura composta da più di un singolo elemento, le funzioni TranslateMomentYY e TranslateMomentZZ effettuano il calcolo utilizzando i diagrammi del momento degli elementi contigui se position+delta e position-delta dovessero cadere al di fuori dell’elemento corrente, di fatto come se la membratura costituisse un elemento unico.

 

Infine, per dimensionare travi e muri RC è possibile utilizzare il seguente script, che utilizza il blocco per distinguere quale codice eseguire sulla base dell'elemento corrente.

 # dimensionamento dell'armatura di una trave di un diaframma rigido

clearRebar

# lungo resistenza del tondo per cemento armato fydl

fydl = unitconv (MPa, model_S, 391.3)

# resistenza della staffa

fyds = fydl

 

# se trave va al blocco 1, se setto va al blocco 2

execif ( isWall == 0,1.0)

execif ( isWall == 1,2.0)

 

$$ 1.0

# momento del progetto: prendere il massimo e il minimo sul raggio

Mpos = MmaxZ

Mneg = MminZ

 

# imposta il copriferro a 40 mm

c = unitconv (mm, model_L, 40)

# calcola l'altezza della sezione effettiva

d = hc

 

# stimare l'area della barra di armatura per i momenti di progetto

AsTop = max (abs ( Mpos ) / (0.9 * d * fydl ), 0.0013 * b * d)

AsBot = max (abs ( Mneg ) / (0.9 * d * fydl ), 0.0013 * b * d)

 

# inserisce l'armatura nel modello: trova il diametro della barra per 3 barre in basso e 3 in alto

nBars = 3

TopD = getBarDiam ( AsTop / nBars )

BotD = getBarDiam ( AsBot / nBars )

TopArea = pi * TopD ^ 2/4

TopArea = unitconv (mm ^ 2, model_L ^ 2, TopArea)

BotArea = pi * BOTD ^ 2/4

BotArea = unitconv (mm ^ 2, model_L ^ 2, BotArea)

 

# staffe D = 8mm

stirrArea = unitconv (mm ^ 2, model_L ^ 2,50)

stirrSpac = unitconv (mm, model_L, 150)

 

# ciclo per barre

i = 1

xdim = (b-2 * c) / (nBars-1)

execwhile ( i <= nBars, 1.1)

$!

 

$$ 1.1

# ID materiale design per barre = 2

# X coord ., Y coord ., Bar area, design material ID, Linit [0,1), Lend (0,1]

# superiore

    addRebarL ( c + xdim * (i-1), hc, TopArea, 2,0,1)

# parte inferiore

    addRebarL ( c + xdim * (i-1), c, BotArea, 2,0,1)

# rinforzi di taglio

# barre in Y, barre in Z, area barra, spaziatura, materiale design ID = 2, Linit [0,1), Lend (0,1]

    addStirrups (2, 2, stirrArea, stirrSpac, 2, 0,1)

i = i + 1

$!

 

# muro

$$ 2.0

# momento del progetto: prendere il massimo e il minimo

Mpos = MmaxZ

Mneg = MminZ

 

# imposta il copriferro a 40 mm

c = unitconv (mm, model_L, 40)

# calcola l'altezza della sezione effettiva

d = hc

 

# stimare l'area della barra di armatura per i momenti di progetto

As = max (max (abs ( Mpos ), abs ( Mneg )) / (0.9 * d * fydl ), 0.003 * A)

 

# inserire la barra d'armatura nel modello - rete di rinforzo 20x20cm D = 8mm

lt = unitconv (cm, model_L, 20)

nBars = ceil ((h-2 * c) / lt ) +1

# diametro del tondino in mm

bd = 8

RebArea = pi * bd ^ 2/4

RebArea = unitconv (mm ^ 2, model_L ^ 2, RebArea)

 

# staffe D = 8mm

stirrArea = RebArea

stirrSpac = lt

 

# ciclo per barre

i = 1

xdim = lt

execwhile ( i <= nBars, 2.1)

$!

 

$$ 2.1

# ID materiale design per barre = 2

# X coord ., Y coord ., Bar area, design material ID, Linit [0,1), Lend (0,1]

    rpos = if ( c + xdim * (i-1)> h, hc, c + xdim * (i-1))

# sinistra

    addRebarL (c, rpos, RebArea, 2,0,1)

# destra

    addRebarL (bc, rpos, RebArea, 2,0,1)

# rinforzi di taglio

# barre in Y, barre in Z, area barra, spaziatura, materiale design ID = 2, Linit [0,1), Lend (0,1]

    addStirrups (2, 2, stirrArea, stirrSpac, 2, 0,1)

i = i + 1

$!