0% found this document useful (0 votes)
276 views

Savitsky Short Prog-1

This document describes a simplified Savitsky method for calculating ship resistance and parameters. It includes: 1) Input variables such as hull geometry, speed, sea state conditions. 2) Calculation of lift, drag, and other resistances at incremental speeds through an iterative loop. Parameters like lift coefficient and critical pitch damping are estimated. 3) Storage of results like resistance components, velocities, trim, and stability parameters in arrays. 4) Output of the results arrays to a results section of the spreadsheet.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
276 views

Savitsky Short Prog-1

This document describes a simplified Savitsky method for calculating ship resistance and parameters. It includes: 1) Input variables such as hull geometry, speed, sea state conditions. 2) Calculation of lift, drag, and other resistances at incremental speeds through an iterative loop. Parameters like lift coefficient and critical pitch damping are estimated. 3) Storage of results like resistance components, velocities, trim, and stability parameters in arrays. 4) Output of the results arrays to a results section of the spreadsheet.
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Prof.

Marco Ferrando Metodo di Savitsky Semplificato


Pagina 1 di 10

' Dati di input
Dim carena As String
Dim caso As String
Dim disl0, beta, betat, lcg0, b, bt, atr, wsskeg, lskeg, flapno
Dim flapsp, flapch, flappo, flapde, dcf, flapp, hs, lp, vv, vi, vf, dv

' Vettori dei risultati
Dim vkn(41), vmps(41), cvu(41), fnv(41), tequ(41), tauc(41), lamb(41)
Dim lke(41), lch(41), lm(41), dft(41), lcge(41)
Dim rtbhu(41), rapdgs(41), rair(41), rflp(41), rawve(41), rskg(41), drg(41)
Dim rtot(41), efhp(41), mbl(41)

' Vettori di calcolo

' Grandezze di calcolo
Dim nv As Integer
Dim esito As String
Dim disl, drag, raa, rflap, raw, rskeg, rtbh, vms, vk, rt, ehp, tau, taucr
Dim vol, cv, fv, lam, lk, lc, d, lcg, mblo, vvms
Dim home As Range
Dim results As Range
Dim startdat As Range
Dim startres As Range

' Dichiarazione delle costanti
Const pig = 3.141593
Const g = 9.80665
Const nus = 0.000001187
Const rhos = 1025 / g
Const knms = 0.5144444444
Const e = 2.718281828
Const cvkw = 0.73549875
Const rhoair = 0.1247
Const cx = 0.55



Sub savshort()
' rev. 98-05-18
' res. appendici secondo Blount & Fox, MT Jan 1976 pag. 18 formule 4 & 5
' rev. 97-06-30
' resistenza Skeg secondo Hadler, SNAME Transactions, 1966
' rev. 97-04-30
' res. agg. sea state SNAME Transactions, Vol.91, 1983, pp. 49-87
' equazione n. 30 a pag. 57
' rev. 97-03-22
' verifica porpoising SNAME Transactions, Vol.91, 1983, pp. 49-87
' equazioni n. 54 a pag. 60

' costanti
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 2 di 10
esito = " "
Set home = ActiveSheet.Range("a1:a1")
Set results = ActiveSheet.Range("a28.z68")
Set startdat = ActiveSheet.Range("h2.h2")
Set startres = ActiveSheet.Range("a28.a28")
Set Status = ActiveSheet.Range("j2.j2")

Status.ClearContents
Call leggidati
vol = disl0 / rhos / g
vvms = vv * knms

' iterazioni per velocita'

fvi = vi * knms / Sqr(g * vol ^ 0.333333)
If fvi < 1 Then
esito = " Velocit iniziale troppo bassa "
GoTo 999
End If
nv = (vf - vi) / dv + 1
For iiv = 1 To nv ' loop sulle velocit
vk = vi + (iiv - 1) * dv
vms = vk * knms
fv = vms / Sqr(g * vol ^ 0.333333)
cv = vms / Sqr(g * b)

' calcolo effetto dei flap
If flapno > 0 Then
clfl = 0.046 * flapch / b * flapsp / b * flapde
liftfl = clfl * 0.5 * rhos * vms ^ 2 * b ^ 2 * flapno
disl = disl0 - liftfl
lcg = (disl0 * lcg0 - liftfl * (0.6 * b - flapsp / b * flapch - flappo)) _
/ disl
Else
disl = disl0
lcg = lcg0
End If

clb = disl / (0.5 * rhos * vms ^ 2 * b ^ 2)

cl0o = 0.1
100 Cl0 = cl0o - 0.0065 * beta * cl0o ^ 0.6 - clb
Cl0 = Cl0 / (1 - (0.0039 * beta / cl0o ^ 0.4))
Cl0 = cl0o - Cl0
If (Abs(Cl0 - cl0o)) > 0.0000001 Then
cl0o = Cl0
GoTo 100
End If

' calcolo Tau Critico per porpoising
xp = lcg / (vol ^ (1 / 3))
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 3 di 10
yp = b / (vol ^ (1 / 3))
fp = clb / Cl0
kp = (106 + 85 * (bt / b)) * (1 + 0.2 * ((beta - betat) / beta)) * (xp / yp) ^ 0.25
taucr = (kp / fv ^ 2 / xp / yp / fp) ^ 0.75

lamo = 5
200 lam = 0.75 * lamo * b - ((lamo ^ 3 * b) / ((5.21 * cv ^ 2 + lamo ^ 2 * 2.39))) - lcg
ders = 3 * lamo ^ 2 * b * (5.21 * cv ^ 2 + lamo ^ 2 * 2.39) - 2 * lamo ^ 4 * 2.39 * b
deri = (5.21 * cv ^ 2 + lamo ^ 2 * 2.39) ^ 2
dert = 0.75 * b - ders / deri
lam = lam / dert
lam = lamo - lam
If (Abs(lam - lamo)) > 0.0000001 Then
lamo = lam
GoTo 200
End If
tau = (Cl0 / (0.012 * lam ^ 0.5 + 0.0055 * lam ^ 2.5 / cv ^ 2)) ^ (1 / 1.1)
kk = 0.012 * lam ^ 0.5 * tau ^ 1.1
vm = vms * Sqr(1 - (kk - 0.0065 * beta * kk ^ 0.6) / (lam * dgcos(tau)))

rn = (vm * lam * b) / nus

Call attc(rn, cf)

' superficie bagnata dallo spray
' (eliminata la possibilit di calcolarla
' per ripristinarla occorre far leggere flspr tra i dati di ingresso)
If flspr = 1 Then
kw = -dgtan(beta) * dgsin(beta) ^ 2 / 3.3 / pig
kw = kw - 3 * dgtan(beta) ^ 2 * dgcos(beta) / 1.7 / pig ^ 2
kw = 0.5 * pig * (1 - kw)
kw1 = kw * dgtan(tau) / dgsin(beta)
aw = dgsin(tau) ^ 2 * (1 - 2 * kw) + kw ^ 2 * dgtan(tau) ^ 2 * ((1 / dgsin(beta) ^ 2) - dgsin(tau) ^
2)
aw = Sqr(aw) / (dgcos(tau) + kw * dgtan(tau) * dgsin(tau))
tgphi = (aw + kw1) / (1 - aw * kw1)
ss = b ^ 2 / 2 * (dgtan(beta) / pig / dgtan(tau) - 1 / (4 * tgphi * dgcos(beta)))
Else
ss = 0
End If

' clacolo correzione di Blount & Fox che viene divisa per 2
ww1 = lcg / b
ww2 = fv - 0.85
mblo = 0.98 + 2 * ww1 ^ 1.45 * EXP(-2 * ww2) - 3 * ww1 * EXP(-3 * ww2)
mblo = (mblo - 1) / 2 + 1

' resistenza d'attrito
df = 0.5 * rhos * vm ^ 2 * (lam * b ^ 2 / dgcos(beta) + ss) * (cf + dcf)
' resistenza dell'aria
raa = 0.5 * rhoair * atr * (vms + vvms) ^ 2 * cx
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 4 di 10
' resistenza dello scafo nudo gi corretta con Blount & Fox
rtbh = (disl * dgtan(tau) + df / dgcos(tau)) * mblo
' resistenza delle appendici di carena (configurazione bielica standard)
If flapp = 1 Then
etaapp = 1 / (0.005 * fv ^ 2 + 1.05)
rap = rtbh * (1 / etaapp - 1)
Else
rap = 0
End If
' resistenza dei flap
rflap = 0.0052 * liftfl * (tau + flapde)
' resistenza aggiunta per mare mosso
If hs > 0 Then
raw = 1.3 * (hs / b) ^ 0.5 * (lp / vol ^ 0.333333) ^ -2.5 * fv * disl0
Else
raw = 0
End If
' resistenza dello skeg
If lskeg > 0 Then
rnsk = (vm * lskeg) / nus
Call attc(rnsk, cfsk)
rskeg = 0.5 * rhos * wsskeg * vm ^ 2 * cfsk
Else
rskeg = 0
End If

' resistenza totale
drag = rtbh + raa + rflap + raw + rskeg + rap
lift = df / dgcos(tau)

' Parametri geometrici
lk = lam * b + b / 2 / pig * dgtan(beta) / dgtan(tau)
lc = lam * b - b / 2 / pig * dgtan(beta) / dgtan(tau)
d = lk * dgsin(tau)
rt = drag / 1000 * g
ehp = drag * vms / 75


'per stampe controllo togliere il commento alla istruzione seguente
' call controllo

' memorizzo risultati
drg(iiv) = drag
rair(iiv) = raa
rflp(iiv) = rflap
rawve(iiv) = raw
rskg(iiv) = rskeg
rtbhu(iiv) = rtbh
rapdgs(iiv) = rap
vmps(iiv) = vms
vkn(iiv) = vk
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 5 di 10
rtot(iiv) = rt
efhp(iiv) = ehp
tequ(iiv) = tau
tauc(iiv) = taucr
cvu(iiv) = cv
fnv(iiv) = fv
lamb(iiv) = lam
lke(iiv) = lk
lch(iiv) = lc
lm(iiv) = lam * b
dft(iiv) = d
lcge(iiv) = lcg
mbl(iiv) = mblo

Next iiv

esito = "OK"
999 Status.Value = esito
Call output

End Sub

Sub attc(rnx, cfx)
' Cf ATTC
cfo = 0.00001
110 cfx = cfo ^ 0.5 * log10(rnx * cfo) - 0.242
cfx = cfx / (0.5 * cfo ^ -0.5 * log10(rnx) + 0.5 * cfo ^ -0.5 * log10(cfo) + cfo ^ 0.5 / cfo *
log10(e))
cfx = cfo - cfx
If (Abs(cfx - cfo)) > 0.0000001 Then
cfo = cfx
GoTo 110
End If


End Sub

Sub controllo()

End Sub

Static Function dgcos(x)
dgcos = COS(x * pig / 180)
End Function

Static Function dgsin(x)
dgsin = SIN(x * pig / 180)
End Function

Static Function dgtan(x)
dgtan = TAN(x * pig / 180)
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 6 di 10
End Function



Sub leggidati()
' Dati di input
' carena, caso
' disl0, beta, betat, lcg0, b, bt, atr, wsskeg, lskeg, flapno
' flapsp, flapch, flappo, flapde, vi, vf, dcf, flapp, hs, lp, vi, vf, dv

results.ClearContents
startdat.Select

carena = ActiveCell
Call nextcell
caso = ActiveCell
Call nextcell
disl0 = ActiveCell
Call nextcell
beta = ActiveCell
Call nextcell
betat = ActiveCell
Call nextcell
lcg0 = ActiveCell
Call nextcell
b = ActiveCell
Call nextcell
bt = ActiveCell
Call nextcell
atr = ActiveCell
Call nextcell
wsskeg = ActiveCell
Call nextcell
lskeg = ActiveCell
Call nextcell
flapno = ActiveCell
Call nextcell
flapsp = ActiveCell
Call nextcell
flapch = ActiveCell
Call nextcell
flappo = ActiveCell
Call nextcell
flapde = ActiveCell
Call nextcell
dcf = ActiveCell
Call nextcell
flapp = ActiveCell
Call nextcell
hs = ActiveCell
Call nextcell
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 7 di 10
lp = ActiveCell
Call nextcell
vv = ActiveCell
Call nextcell
vi = ActiveCell
Call nextcell
vf = ActiveCell
Call nextcell
dv = ActiveCell
End Sub

Static Function log10(x)
log10 = LOG(x) / LOG(10#)
End Function

Sub nextcell()
ActiveCell.Offset(1, 0).Activate
End Sub

Sub nextrow()
ActiveCell.Offset(-nv, 1).Activate
End Sub

Sub output()

startres.Select
For iiv = 1 To nv
ActiveCell.Value = vkn(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = vmps(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = cvu(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = fnv(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = tequ(iiv)
Call nextcell
Next iiv
Call nextrow
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 8 di 10
For iiv = 1 To nv
ActiveCell.Value = tauc(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = lamb(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = lke(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = lch(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = lamb(iiv) * b
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = dft(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = lcge(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = mbl(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = rtbhu(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = rapdgs(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 9 di 10
ActiveCell.Value = rskg(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = rair(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = rflp(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = rawve(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = drg(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = rtot(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = efhp(iiv)
Call nextcell
Next iiv
Call nextrow
For iiv = 1 To nv
ActiveCell.Value = efhp(iiv) * cvkw
Call nextcell
Next iiv

With Charts("Tau")
.HasTitle = True
.ChartTitle.Text = "Carena: " + carena
End With
With Charts("RT")
.HasTitle = True
.ChartTitle.Text = "Carena: " + carena
End With
With Charts("PE")
.HasTitle = True
.ChartTitle.Text = "Carena: " + carena
End With
Prof. Marco Ferrando Metodo di Savitsky Semplificato
Pagina 10 di 10
home.Select

End Sub

You might also like