Author Topic: Sottopressioni in semispazio elastico - Equazioni di Westergaard in VBA  (Read 4373 times)

0 Members and 1 Guest are viewing this topic.

Offline quattropassi

  • Esperto del forum
  • ***
  • Posts: 226
  • Karma: 49
  • Neo - Laureato
 :muro:
M'è preso l'uzzolo di mettere in funzione le equazioni di Westergaard che si trovano un po' ovunque (es. al 5.5 del Bowles) per le pressioni trasmesse da una piastra BxL a profondità Z.
Questo sarebbe semplice (sempre non facendo sciocchezze  :()
Ma volendo spostare il punto P dallo spigolo a un po' dove si vuole...
E allora avrei pensato a un codice tipo questo.
Code: [Select]
Private Function pv_Westergaard(B As Double, _
                                L As Double, _
                                Z As Double, _
                                qo As Double, _
                                Ni As Double) As Variant
'
' Funzione Private che adopero come subroutine piu oltre    Public Function qv_West_inP
' questa funzione è
' pv_Westergaard (B, L, Z, qo, Ni)
'
' Carico qo u. d. su BxL
' Terreno di coefficiente di Piosson Ni
' Alla profondità z
' si calcola la qv trasmessa qv(z) in uno degli spigoli della piastra BxL
'
' Traggo dal cap 16 degli appunti di Geotec di ING UNI FI
' Questi ispirati da Manuale Aztec di Carl 10
' svetoni@gmail.com
' v 20100106

' M=B/z
' N=L/z
' a = (1-2Ni)/(2-2Ni)
' qv(z)= qo/2pigreco  Arc Tan {M N /[radq(a) * radq(M^2 +N^2 + a)]


Dim M As Double
Dim N As Double
Dim a As Double
Dim PiGreco As Double


'   CALCOLO VALORE DI PIGRECO--------
    PiGreco = Atn(1) * 4
'   ----------------------------------

M = B / Z
N = L / Z
a = (1 - 2 * Ni) / (2 - 2 * Ni)
pv_Westergaard = (qo / (2 * PiGreco)) * Atn((M * N / (((M ^ 2 + N ^ 2 + a) ^ (1 / 2)) * (a) ^ (1 / 2))))

End Function
Public Function qv_West_inP(B As Double, _
                                X As Double, _
                                L As Double, _
                                Y As Double, _
                                Z As Double, _
                                qo As Double, _
                                Ni As Double) As Variant

' Carico qo u. d. su BxL
' Terreno di coefficiente di Poisson Ni
' Alla profondità z
' si calcola la qv trasmessa qv(z)
' Nel punto P(X,Y)  con X<=>B e Y <=> L
' Metodo di Westergaard per il calcolo di sforzi trasmessi a profondità Z di uno strato di Poisson Ni
'
' Traggo dal cap 5.5 del Bowles p. 267
' Questi ispirati da Manuale Aztec di Carl 10
' svetoni@gmail.com
' v 20100108


Dim q1 As Double
Dim q2 As Double
Dim q3 As Double
Dim q4 As Double
Dim Situaz As Integer

If X <= B And Y <= L Then
Situaz = 1
ElseIf X > B And Y <= L Then
Situaz = 2
ElseIf X <= B And Y > L Then
Situaz = 3
ElseIf X > B And Y > L Then
Situaz = 4
End If

Select Case Situaz
Case 1
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard(X, (L - Y), Z, qo, Ni)
        q3 = pv_Westergaard((B - X), (L - Y), Z, qo, Ni)
        q4 = pv_Westergaard((B - X), Y, Z, qo, Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'       qv_West_inP = "Situaz 1 P Entro Sagoma BxL"

Case 2
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard(X, (L - Y), Z, qo, Ni)
        q3 = pv_Westergaard((X - B), Y, Z, (-qo), Ni)
        q4 = pv_Westergaard((X - B), (L - Y), Z, (-qo), Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'        qv_West_inP = "Situaz 2 Fuori Sagoma Oltre B"

Case 3
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard((B - X), Y, Z, qo, Ni)
        q3 = pv_Westergaard(X, (Y - L), Z, (-qo), Ni)
        q4 = pv_Westergaard((B - X), (Y - L), Z, (-qo), Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'       qv_West_inP = "Situaz 3 Fuori Sagoma Oltre L"

Case 4
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard(X, (Y - L), Z, (-qo), Ni)
        q3 = pv_Westergaard((X - B), (Y - L), Z, qo, Ni)
        q4 = pv_Westergaard((X - B), Y, Z, (-qo), Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'        qv_West_inP = "Situaz 4 Fuori sagoma Oltre B e Oltre L"

End Select
End Function

Non mi pare che tiri dei grandi sfondoni... e di codice son pure novello.
Comunque, se qualcuno ( :firuli: afazioooo  :prof:) lo vuole usare  :byebye:... io lo accetto anche migliorato (già che lo vedo, perché non frenare i valori negativi di X ed Y? Zuccone!).

Un saluto  :byebye:
* Se ci scambiamo un dollaro, ognuno rimane con un dollaro.
* Se ci scambiano un'informazione, ognuno rimane con due informazioni.

afazio

  • Guest
Re: Sottopressioni in semispazio elastico - Equazioni di Westergaard in VBA
« Reply #1 on: 08 January , 2010, 23:11:45 PM »
:muro:
M'è preso l'uzzolo di mettere in funzione le equazioni di Westergaard che si trovano un po' ovunque (es. al 5.5 del Bowles) per le pressioni trasmesse da una piastra BxL a profondità Z.
Questo sarebbe semplice (sempre non facendo sciocchezze  :()
Ma volendo spostare il punto P dallo spigolo a un po' dove si vuole...
E allora avrei pensato a un codice tipo questo.
Code: [Select]
Private Function pv_Westergaard(B As Double, _
                                L As Double, _
                                Z As Double, _
                                qo As Double, _
                                Ni As Double) As Variant
'
' Funzione Private che adopero come subroutine piu oltre    Public Function qv_West_inP
' questa funzione è
' pv_Westergaard (B, L, Z, qo, Ni)
'
' Carico qo u. d. su BxL
' Terreno di coefficiente di Piosson Ni
' Alla profondità z
' si calcola la qv trasmessa qv(z) in uno degli spigoli della piastra BxL
'
' Traggo dal cap 16 degli appunti di Geotec di ING UNI FI
' Questi ispirati da Manuale Aztec di Carl 10
' svetoni@gmail.com
' v 20100106

' M=B/z
' N=L/z
' a = (1-2Ni)/(2-2Ni)
' qv(z)= qo/2pigreco  Arc Tan {M N /[radq(a) * radq(M^2 +N^2 + a)]


Dim M As Double
Dim N As Double
Dim a As Double
Dim PiGreco As Double


'   CALCOLO VALORE DI PIGRECO--------
    PiGreco = Atn(1) * 4
'   ----------------------------------

M = B / Z
N = L / Z
a = (1 - 2 * Ni) / (2 - 2 * Ni)
pv_Westergaard = (qo / (2 * PiGreco)) * Atn((M * N / (((M ^ 2 + N ^ 2 + a) ^ (1 / 2)) * (a) ^ (1 / 2))))

End Function
Public Function qv_West_inP(B As Double, _
                                X As Double, _
                                L As Double, _
                                Y As Double, _
                                Z As Double, _
                                qo As Double, _
                                Ni As Double) As Variant

' Carico qo u. d. su BxL
' Terreno di coefficiente di Poisson Ni
' Alla profondità z
' si calcola la qv trasmessa qv(z)
' Nel punto P(X,Y)  con X<=>B e Y <=> L
' Metodo di Westergaard per il calcolo di sforzi trasmessi a profondità Z di uno strato di Poisson Ni
'
' Traggo dal cap 5.5 del Bowles p. 267
' Questi ispirati da Manuale Aztec di Carl 10
' svetoni@gmail.com
' v 20100108


Dim q1 As Double
Dim q2 As Double
Dim q3 As Double
Dim q4 As Double
Dim Situaz As Integer

If X <= B And Y <= L Then
Situaz = 1
ElseIf X > B And Y <= L Then
Situaz = 2
ElseIf X <= B And Y > L Then
Situaz = 3
ElseIf X > B And Y > L Then
Situaz = 4
End If

Select Case Situaz
Case 1
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard(X, (L - Y), Z, qo, Ni)
        q3 = pv_Westergaard((B - X), (L - Y), Z, qo, Ni)
        q4 = pv_Westergaard((B - X), Y, Z, qo, Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'       qv_West_inP = "Situaz 1 P Entro Sagoma BxL"

Case 2
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard(X, (L - Y), Z, qo, Ni)
        q3 = pv_Westergaard((X - B), Y, Z, (-qo), Ni)
        q4 = pv_Westergaard((X - B), (L - Y), Z, (-qo), Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'        qv_West_inP = "Situaz 2 Fuori Sagoma Oltre B"

Case 3
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard((B - X), Y, Z, qo, Ni)
        q3 = pv_Westergaard(X, (Y - L), Z, (-qo), Ni)
        q4 = pv_Westergaard((B - X), (Y - L), Z, (-qo), Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'       qv_West_inP = "Situaz 3 Fuori Sagoma Oltre L"

Case 4
        q1 = pv_Westergaard(X, Y, Z, qo, Ni)
        q2 = pv_Westergaard(X, (Y - L), Z, (-qo), Ni)
        q3 = pv_Westergaard((X - B), (Y - L), Z, qo, Ni)
        q4 = pv_Westergaard((X - B), Y, Z, (-qo), Ni)
        qv_West_inP = q1 + q2 + q3 + q4
'        qv_West_inP = "Situaz 4 Fuori sagoma Oltre B e Oltre L"

End Select
End Function

Non mi pare che tiri dei grandi sfondoni... e di codice son pure novello.
Comunque, se qualcuno ( :firuli: afazioooo  :prof:) lo vuole usare  :byebye:... io lo accetto anche migliorato (già che lo vedo, perché non frenare i valori negativi di X ed Y? Zuccone!).

Un saluto  :byebye:

Interessante
Io ho gia creato uno scheletro per il calcolo delle sovratensioni e per il tracciamento delle isobare, con colori che via via sfumano in funzione del grado di sovratensione. Il caso che ho impostato e che avevo a buon punto, tratta della determinazione delle sovratensioni in qualsisi punti di una qualsiasi verticale, dovuta alla presennza di un numero discreto di fasce di carico (fondazioni a trave rovescia) con carico uniformemente distribuito o carico trapezio in ognuna delle "N" strisce di carico.

Non appena riesco a trovare il tempo, insieme al progetto "concio" che purtroppo ho lasciato a tre quarti, iniziero' altro 3d che illustrerà questo altro mio foglio

Intanto prendo la tua funzione e me la studio.

Offline quattropassi

  • Esperto del forum
  • ***
  • Posts: 226
  • Karma: 49
  • Neo - Laureato
Re: Sottopressioni in semispazio elastico - Equazioni di Westergaard in VBA
« Reply #2 on: 08 January , 2010, 23:46:36 PM »
 :inchino:
No afazio, finiscila!  ;)
Nel senso: prima finisci la funzione sul pendio.
L'attendo/iamo con ansia.

Poi massacra pure i "pensierini" che ho postato   :)
 :ciau:
* Se ci scambiamo un dollaro, ognuno rimane con un dollaro.
* Se ci scambiano un'informazione, ognuno rimane con due informazioni.

Offline quattropassi

  • Esperto del forum
  • ***
  • Posts: 226
  • Karma: 49
  • Neo - Laureato
Re: Sottopressioni in semispazio elastico - Equazioni di Westergaard in VBA
« Reply #3 on: 29 January , 2010, 08:37:55 AM »
... dunque, dov'ero rimasto.
Ah, ecco: il cedimento elastico.
Spulciando il Bowles (4 ed) sono incappato nel §5.6 e nell'ambizione di stimare il cedimento elastico sotto carico u.d. d'impronta BxL affondato D sotto il p.c.
interessante semispazio elastico di spessore H.

M'è venuta voglia di "funzionificare" formula e coefficienti Is=I1 * I2, DELTA H e..., questo m'ha fatto penare,  ??? l'IF (o F3) della figura di Bowles.
Capisco la scarsa rilevanza pratica della cosa, però, grazie al prof McCoy, ho trovato le formule di Fox citate dal Bowles.

Ne son venuti fuori i codici che riporto in calce.
Poi, se uno vuole un modello xlt per smanetarci, commentare, emendare, correggere... bene, allora qui:
http://www.box.net/shared/o7trkuk1gd

 :mmm:  :ciau:


Code: [Select]
Public Function if_Bowles_5_16_a(B_larghezza As Double, _
L_lunghezza As Double, _
D_affonDiPosa As Double, _
ni As Double) As Variant


'If_Bowles_5_16a = IF di Bowles (5.16.a) §5.6 p. 269 4a ediz 5a rist
'If Fig. 5.9 con B L D misure reali della fondazione rettangolare caricata u.d.
'Si puo osservare  che il coeff di Bowles è il rapporto wo/wc di Fox
'qundi If_Bowles_5_16a = wo/wc_FOX_19

'Equazioni di Fox citate da Bowles come calcolate e tabellate in fig. 5.9
'THE MEAN ELASTIC SETLLEMENT OF A UNIFORMLY LOADED AREA AT A DEPTH BELOW THE GROUND SURFACE
'E.N. FOX, Building Reserch Station
'Grazie a McCoy che le ha ritrovate.
'20100128 Ing. Svetoni.


Dim aa As Double
Dim bb As Double
Dim cc As Double

Dim beta1 As Double
Dim beta2 As Double
Dim beta3 As Double
Dim beta4 As Double
Dim beta5 As Double

Dim r As Double
Dim r2 As Double
Dim r3 As Double
Dim r4 As Double

Dim y1 As Double
Dim y2 As Double
Dim y3 As Double
Dim y4 As Double
Dim y5 As Double

Dim SommaBetaYpsilon As Double


aa = B_larghezza
bb = L_lunghezza
cc = D_affonDiPosa

beta1 = 3 - 4 * ni
beta2 = 5 - 12 * ni + 8 * ni ^ 2
beta3 = -4 * ni * (1 - 2 * ni)
beta4 = -1 + 4 * ni - 8 * ni ^ 2
beta5 = -4 * (1 - 2 * ni) ^ 2

r = 2 * cc
r1 = (aa ^ 2 + r ^ 2) ^ (1 / 2)
r2 = (bb ^ 2 + r ^ 2) ^ (1 / 2)
r3 = (aa ^ 2 + bb ^ 2 + r ^ 2) ^ (1 / 2)
r4 = (aa ^ 2 + bb ^ 2) ^ (1 / 2)


y1 = aa * Log((r4 + bb) / aa) + bb * Log((r4 + aa) / bb) - ((r4 ^ 3 - aa ^ 3 - bb ^ 3) / (3 * aa * bb))

y2 = aa * Log((r3 + bb) / r1) + bb * Log((r3 + aa) / r2) - ((r3 ^ 3 - r2 ^ 3 - r1 ^ 3 + r ^ 3) / (3 * aa * bb))

y3 = (r ^ 2 / aa) * Log(((bb + r2) * r1) / ((bb + r3) * r))
y3 = y3 + (r ^ 2 / bb) * Log(((aa + r1) * r2) / ((aa + r3) * r))

y4 = r ^ 2 * (r1 + r2 - r3 - r) / (aa * bb)

y5 = r * Atn(aa * bb / (r * r3))



SommaBetaYpsilon = beta1 * y1 + beta2 * y2 + beta3 * y3 + beta4 * y4 + beta5 * y5

'controlli provvisori per verifiche
'If_Bowles_5_16a = SommaBetaYpsilon
'If_Bowles_5_16a = ((beta1 + beta2) * y1)
'If_Bowles_5_16a = y5


if_Bowles_5_16_a = SommaBetaYpsilon / ((beta1 + beta2) * y1)

End Function

e poi

Code: [Select]
Public Function is_Bowles_5_6(B_primo As Double, _
L_primo As Double, _
H_spessore As Double, _
ni As Double) As Variant

'Is_Bowles_5_16a = IF di Bowles (5.16.a) §5.6 p. 269 4a ediz 5a rist
'La fondazione è BxL
'ma si devono considerare B' L' a seconda del cedimento che cerchi
'H e lo spessore dello strato compressibile
'20100128 Ing. Svetoni.

Dim I1 As Double
Dim I2 As Double
Dim M As Double
Dim N As Double
Dim PiGreco As Double

PiGreco = Atn(1) * 4

M = L_primo / B_primo
N = H_spessore / B_primo


I1 = (1 + (M ^ 2 + 1) ^ (1 / 2)) * (M ^ 2 + N ^ 2) ^ (1 / 2)
I1 = I1 / M
I1 = I1 / (1 + (M ^ 2 + N ^ 2 + 1) ^ (1 / 2))
I1 = Log(I1)
I1 = M * I1
I1 = I1 + Log((M + (M ^ 2 + 1) ^ (1 / 2)) * (1 + N ^ 2) ^ (1 / 2) / (M + (M ^ 2 + N ^ 2 + 1) ^ (1 / 2)))
I1 = I1 / PiGreco


I2 = (M ^ 2 + N ^ 2 + 1) ^ (1 / 2)
I2 = M / (N * I2)
I2 = Atn(I2)
I2 = N * I2 / (2 * PiGreco)

'is_Bowles_5_6 = M
'is_Bowles_5_6 = N
'is_Bowles_5_6 = I1
'is_Bowles_5_6 = I2
is_Bowles_5_6 = I1 + I2 * (1 - 2 * ni) / (1 - ni)


End Function

infine

Code: [Select]
Public Function DeltaH_Bowles_5_16_a(B_primo As Double, _
qo As Double, _
Es As Double, _
Coeff_IS As Double, _
Coeff_IF As Double, _
ni As Double) As Variant

'Is_Bowles_5_16a = IF di Bowles (5.16.a) §5.6 p. 269 4a ediz 5a rist
'La fondazione è BxL
'ma si devono considerare B' L' a seconda del cedimento che cerchi
'H e lo spessore dello strato compressibile
'Es il modulo elastico
'ni il coefficiente di Poisson (0.3 0.5 in genere)
'
'Vedi esempio 5.6 pag. 271
'20100128 Ing. Svetoni.

DeltaH_Bowles_5_16_a = qo * B_primo * (1 - ni ^ 2) / Es
DeltaH_Bowles_5_16_a = DeltaH_Bowles_5_16_a * Coeff_IS * Coeff_IF

End Function


* Se ci scambiamo un dollaro, ognuno rimane con un dollaro.
* Se ci scambiano un'informazione, ognuno rimane con due informazioni.

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24