CAPITOLO 4 EXCEL MACRO
4.9 Definizione casi di carico-1 del Modello Geometrico su Straus7(API)
A seguito verrà definito il caso di carico 1. Nella concezione del modello, sono state create due celle che indicano il numero del nodo sopra la frattura e di quello sotto la frattura.
Le Celle I26 e I27, rispettivamente UPCRACK e DOWNCRACK, sono i nodi antecedenti alla CRACK-TIP, cioè alla l’apice della frattura.
Seguendo la teoria della VCCT Modificata (Revised), dobbiamo applicare a questi nodi delle forze unitarie opposte sia in direzione x che y per poi trovare gli spostamenti relativi tra essi dopo aver lanciato l’analisi. Questi spostamenti sono necessari per calcolare i coefficienti della matrice di flessibilità, ma questo argomento verrà trattato approfonditamente nel capitolo 5.
Prima istruzione
Si applicano due forze in direzione x, il valore di queste forze è compreso tra la cella AW3 alla cella AW5 per l’upcrack e dalla cella AW7 alla cella AW9 per il downcrack.
CASO 1 - St7SetNodeForce3
FX = 1 N FY = 0 N FZ= 0 N DOWNCRACK FX = -1 N FY = 0 N FZ= 0 N
Tabella 4.41 – Definizione del caso di carico 1
Seconda istruzione Si lancia l’analisi.
In Tabella 4.42 sono stati riportati i valori corrispondenti al tipo di analisi e usati nelle applicazioni e successivamente i vari risolutori disponibili e i modi di risoluzione.
Solvers = 1, si riferisce ad un Risolutore Statico Lineare
Sovers Modes = 3, si riferisce a smBackgroundRun, cioè non viene creata una finestra di dialogo del solutore , il processo termina al completamento. Wait = 1, si definisce la modalità di esecuzione del solutore, “1” sta per btTrue. Quindi possiamo fermare la risoluzione in qualsiasi momento.
RunSolver
Solvers = 1 Solvers Modes = 3
Wait = 1
Capitolo 4 116
Rem Solvers
Public Const stLinearStaticSolver = 1 Public Const stLinearBucklingSolver = 2 Public Const stNonlinearStaticSolver = 3 Public Const stNaturalFrequencySolver = 4 Public Const stHarmonicResponseSolver = 5
Public Const stSpectralResponseSolver = 6 Public Const stLinearTransientDynamicSolver = 7 Public Const stNonlinearTransientDynamicSolver = 8
Public Const stSteadyHeatSolver = 9 Public Const stTransientHeatSolver = 10 Public Const stLoadInfluenceSolver = 11 Public Const stQuasiStaticSolver = 12
Rem Solver Modes
Public Const smNormalRun = 1 , Viene mostrato la finestra di dialogo del solutore, il processo aspetta per una terminazione manuale
Public Const smProgressRun = 2, Viene mostrato una barra di progresso del solutore, il processo termina al completamento
Public Const smBackgroundRun = 3, Non viene creata una finestra di dialogo del solutore , il processo termina al completamento
Public Const smNormalCloseRun = 4, Viene mostrato la finestra di dialogo del solutore, il processo termina al completamento
Wait
Definisce la modalità di esecuzione del solutore. Utilizzando “btTrue” in l’esecuzione del chiamante potrà essere fermata fino a quando la risoluzione non è completa.
Mettendo invece “btFalse” , l’esecuzione del chiamante potrà continuare e la risoluzione funzionerà indipendentemente.
Rem Boolean Types Public Const btFalse = 0
Public Const btTrue = 1
Terza istruzione
Dopo aver lanciato l’analisi, è necessario aprire i risultati. Nel foglio di calcolo preso in esame non risultano casi secondari disponibili, ne esiste solo uno definito con “1”.
Le combinazioni sono definite btFalse, in quanto non ci sono risultati di combinazioni secondari.
St7OpenResultFile(1, nome_analisi, "", 0, 1, 0)
"" definiscono una stringa nulla, che verrà combinata con il file spettrale di default definito dall’utente nel modello di Straus7. Nel modello in esempio
non è stato definito niente, dunque è come se il programma non lo considerasse.
Se invece un utente volesse combinare il file del risultato spettrale, all’interno delle virgolette deve inserire il percorso completo e il nome del file.
Quarta istruzione
Successivamente all’apertura dei risultati, è necessario indicare i nodi dai quali prendere i risultati, che sono l’upcrack e il downcrack.
Il tipo di risultato che viene considerato, dipende dal valore definito nella cella BD2.
Il risultati che possiamo estrapolare sono definiti qui sotto:
Rem Node Result Types Public Const rtNodeDisp = 1
Public Const rtNodeVel = 2 Public Const rtNodeAcc = 3 Public Const rtNodePhase = 4 Public Const rtNodeReact = 5 Public Const rtNodeTemp = 6 Public Const rtNodeFlux = 7 Public Const rtNodeInfluence = 1
Ai fini dell’esempio, è stato scelto il numero 1, in quanto è necessario conoscere gli spostamenti dei nodi.
GetNodeResults
Result Type = 1
Tabella 4.43 – Definizione del tipo di risultato estrapolare dai nodi
Displacement
[0..2] - Traslazione nelle direzioni degli assi 123 per lo specifico UCS. [3..5] - Rotazioni nelle direzioni degli assi 123 per lo specifico UCS.
La subroutine si chiama CASO_1 e si collega alle altre subroutine attraverso il comando di chiamata “Call”. Il flusso logico con cui si avviano le subroutine è:
CASO_1 (Inizio) - Call St7Init - Apertura di un modello già creato
Capitolo 4 118 Call SetNodeForce3_DOWN- Definizione carico forza DOWNCRACK
Call RunSolver- Lancio del risolutore Call OpenResult- Apertura risultati analisi Call GetNodeResult_UP- Lettura risultati Nodo UPCRACK Call GetNodeResult_DOWN- Lettura risultati Nodo DOWNCRACK
CASO_1 (Fine) – Salva e Chiudi il File
SetNodeForce3_UP
Sub SetNodeForce3_UP()
Dim errore As Integer Dim Force(2) As Double For I = 0 To 2
Force(I) = AW(I + 3)
Next I
errore = St7SetNodeForce3(1, N°Nodo UPCRACK, 1, Force(0)) AE12 = errore
SetNodeForce3_DOWN
Sub SetNodeForce3_DOWN()
Dim errore As Integer Dim Force(2) As Double For I = 0 To 2
Force(I) = AW(I + 7)
Next I
errore = St7SetNodeForce3(1, N°Nodo DOWNCRACK, 1, Force(0)) AE13 = errore
RunSolver
Sub RunSolver()
Dim errore As Integer
Solvers = BA2 SolversModes = BA3 Wait = BA4
errore = St7RunSolver(1, Solvers, SolversModes, Wait) AE14 = errore
OpenResult
Sub OpenResult()
Dim errore As Integer
Dim percorso As String, modello As String, nome_analisi As String
percorso = C31 modello = C33
nome_analisi = percorso & modello & ".lsa"
errore = St7OpenResultFile(1, nome_analisi, "", 0, 1, 0) AE15 = errore
GetNodeResult_UP
Sub GetNodeResult_UP()
Dim errore As Integer, ResultType As Long Dim NodeRes(6) As Double
ResultType = BD2
errore = St7GetNodeResult(1, ResultType, N°Nodo UPCRACK, 1, NodeRes(0))
C40 = NodeRes(0) C41= NodeRes(1) C42 = NodeRes(2) C43 = NodeRes(3) C44 = NodeRes(4) C45 = NodeRes(5) GetNodeResult_DOWN Sub GetNodeResult_DOWN()
Dim errore As Integer Dim NodeRes(6) As Double
ResultType = BD2
errore = St7GetNodeResult(1, ResultType, N°Nodo DOWNCRACK, 1, NodeRes(0)) AE17 = errore C47 = NodeRes(0) C48 = NodeRes(1) C49 = NodeRes(2) C50 = NodeRes(3) C51 = NodeRes(4) C52 = NodeRes(5) End Sub