
/***************************************************/
/***************************************************/
/**** Tasarim ve Hesap:                         ****/
/**** Kenan KILIÇASLAN                          ****/
/**** Makina ve Bilgisayar Yüksek Mühendisi     ****/
/**** kenankilicaslan@gmail.com                 ****/
/***************************************************/
/***************************************************/

var col1=0.00002,kut1=0.10,man1,dolor

function ReynoltSayisi(Hiz,Cap,KinVizkozite)
{
	return(Hiz*Cap/KinVizkozite)
}

//
// Kanal debi orani fonksiyonu 
// Doluluk oranini bulmak için
//
function KanalDebiOrani(DolulukOrani)
{
	var X, Teta, Cap, Alan, Alan1, alanorani, HidrolikYaricap, Cevre1, b, alfa, HidrolikYaricap1,KanalDebiOr
   	X = 1 - 2 * DolulukOrani
   	Teta = 2 * (Math.atan(-X / Math.sqrt(-X * X + 1)) + 2 * Math.atan(1)) * 180 / 3.1415
   	Cap = 1
   	Alan = 3.1415 * Math.pow(Cap,2) / 4
   	Alan1 = (3.1415 * Teta / 360 - Math.sin(Teta * 3.1415 / 180) / 2) * Math.pow(Cap , 2) / 4
   	alanorani = Alan1 / Alan
   	HidrolikYaricap = Alan / (3.1415 * Cap)
   	Cevre1 = 3.1415 * Cap * Teta / 360
   	if (DolulukOrani > 0.5)
   	{
      	b = Cap * Math.sin(Teta * 3.1415 / 360)
      	alfa = (Math.pow((10 * DolulukOrani - 5) , 3) + 5 * (10 * DolulukOrani - 5)) / 150
      	Cevre1 = Cevre1 + alfa * b
	}
    HidrolikYaricap1 = Alan1 / Cevre1
    if (DolulukOrani != 1)
    {
      	KanalDebiOr = (Alan1 / Alan) * Math.pow((HidrolikYaricap1 / HidrolikYaricap) , 0.625)
    }  
    else
    {
      	KanalDebiOr = 1
    }
 return(KanalDebiOr)
}


function KanalHizOrani(DolulukOrani)
{
	var X, Teta, Alan, Alan1, alanorani, HidrolikYaricap, Cevre1, b,alfa,HidrolikYaricap1,KanalHizOran
	X= 1-2*DolulukOrani
	
	Teta = 2 * (Math.atan(-X / Math.sqrt(-X * X + 1)) + 2 * Math.atan(1)) * 180 / 3.1415
   	Cap = 1
   	Alan = 3.1415 * Math.pow(Cap, 2) / 4
   	Alan1 = (3.1415 * Teta / 360 - Math.sin(Teta * 3.1415 / 180) / 2) * Math.pow(Cap, 2) / 4
   	alanorani = Alan1 / Alan
   
   	HidrolikYaricap = Alan / (3.1415 * Cap)
   	Cevre1 = 3.1415 * Cap * Teta / 360
   	if (DolulukOrani> 0.5)
   	{
      	b = Cap * Math.sin(Teta * 3.1415 / 360)
      	alfa = (Math.pow((10 * DolulukOrani- 5),3) + 5 * (10 * DolulukOrani- 5)) / 150
      	Cevre1 = Cevre1 + alfa * b
    }
    HidrolikYaricap1 = Alan1 / Cevre1
    if (DolulukOrani != 1)
    {
      	KanalHizOran = Math.pow((HidrolikYaricap1 / HidrolikYaricap),0.625)
     }
    else
    {
      	KanalHizOran = 1
    }
    return(KanalHizOran )
}

//
// Kanal Debi orani fonksiyonunun 
// Türevi
//
function turev(X)
{
  	var dh=0.00001, a, c,turev0
  	a = KanalDebiOrani(X + dh)
  	c = KanalDebiOrani(X)
  	turev0= (a - c)/dh
  	return(turev0)
}
//
// Debi oranindan doluluk oranini bulan fonksiyon
//
function DolulukBul(DebiOran) {
	var x1,x2
  	x1 = 0.5
  	while(true)
  	{
  		x2 = x1 - (KanalDebiOrani(x1) - DebiOran) / turev(x1)
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function fonk1(X,D,H,k,kinvizk)
{
    var a,b,c,f

	a=2.51/ReynoltSayisi(X,D,kinvizk)
	b=k/(3.71*D)
	c=Math.sqrt(2*9.81*H*D)
	f=X/c+2*Math.log(a*X/c+b)/Math.log(10)
	return(f)
}

function turev1(X,D,H,k,kinvizk)
{
    var a,b,c,t
    
	a=2.51/ReynoltSayisi(X,D,kinvizk)
	b=k/(3.71*D)
	c=Math.sqrt(2*9.81*H*D)
	t=1/c+2*a/(Math.log(10)*(a*X/c+b))
	return(t)	
}

function colebrookeHiz(kayip,D,k,kinvizk)
{
	var x1,x2
  	x1 = 0.001
  	while(true)
  	{
  		x2 = x1 - fonk1(x1,D,kayip,k,kinvizk)/ turev1(x1,D,kayip,k,kinvizk)
  		if (Math.abs(x2 - x1) < 0.00000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function colebrookeFonk(Lamda, k, D, Re){
	var a,b,c
	a=k/D/3.71
	b=2.51/Re/Math.sqrt(Lamda)
	c=2*Math.log(a+b)*Math.LOG10E
	return (1/Math.sqrt(Lamda)+c)
}

function colebrookeTurev(Lamda, k, D, Re, fnc){
  	var dh=0.0000001, a
  	a = colebrookeFonk(Lamda + dh, k, D, Re)
  	return((a - fnc)/dh)
}

function colebrookeLamda(k, D, Re)
{
	var x1, x2, fnc, trv
  	x1 = 0.001
  	while(true)
  	{
	  	fnc=colebrookeFonk(x1,k, D, Re)
	  	trv =colebrookeTurev(x1,k, D, Re,fnc)
  		x2 = x1 - fnc/trv 
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function hidrolikKaygan(Lamda, Re) {
	return (1/Math.sqrt(Lamda) -2*Math.log(Re*Math.sqrt(Lamda)/2.51)*Math.LOG10E);
}

function hidrolikKayganTurev(Lamda, Re,fnc) {
  	var dh=0.000001;
	return ((hidrolikKaygan(Lamda + dh, Re)-fnc)/dh);
}

function hidrolikKayganLamda(Re)
{
	var x1, x2
  	x1 = 0.001
  	while(true)
  	{
  		x2 = x1 - hidrolikKaygan(x1, Re)/ hidrolikKayganTurev(x1, Re)
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function tamTurbulansLamda(k, D)
{
	return(Math.pow(1/(2*Math.log(3.71/(k/D))*Math.LOG10E), 2))
}

function Lamda(k,D,Re){
	var a, b, c, lamda
	a= colebrookeLamda(k, D, Re) // geçis bölgesi lamda
	b=Re*Math.sqrt(a)*k/D  // Tam türbulans siniri b=200
//	alert("b:"+b)
	c=30.0*D*Math.pow(Re,-7/8)  // hidrolik kaygan bölge lamda<c
	if (Re<2500) {//
		lamda=64/Re
	} else if (b>200) {   // Tam türbilansli bölge
		lamda=tamTurbulansLamda(k, D)
//		alert ("tam"+lamda)
/*	} else if (a<c) { //hidrolik kaygan bölge
		lamda=hidrolikKayganLamda(Re)
//		alert ("kaygan"+lamda)
*/
	} else { // geçis bölgesi
		lamda=a
//		alert ("geçis"+lamda)
	}
	return (lamda)
}

function MoodyHizFonk(Hiz, Egim, k, Cap, KinVizk) {
	return (Egim-Lamda(k,Cap,ReynoltSayisi(Hiz,Cap,KinVizk))*Math.pow(Hiz,2)/Cap/(2*9.81))
}

function MoodyHizTurev(Hiz, Egim, k, Cap, KinVizk, fnc) {
	var dh=0.000001
	return ((MoodyHizFonk(Hiz+dh, Egim, k, Cap, KinVizk)-fnc)/dh)
}

function MoodyHiz(Egim, k, Cap, KinVizk) {
	var x1,x2,fnc,trv
  	x1 = 1.0
  	while(true)
  	{
	  	fnc=MoodyHizFonk(x1, Egim, k, Cap, KinVizk)
	  	trv=MoodyHizTurev(x1, Egim, k, Cap, KinVizk,fnc)
  		x2 = x1 - fnc/ trv
  		if (Math.abs(x2 - x1) < 0.00000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function MoodyEgim(Hiz, k, Cap, KinVizk) {
	var A, B
	A=Lamda(k,Cap,ReynoltSayisi(Hiz,Cap,KinVizk))
	B=Math.pow(Hiz,2)/Cap/(2*9.81)
	return (A*B)
}

function MoodyCapFonk(Cap, Debi,Egim, DolOrani, k, KinVizk) {
	var xDebiOrani, xDoluAkistaDebi, xAlan, xHiz, D
	xDebiOrani=KanalDebiOrani(DolOrani)
	xDoluAkistaDebi=Debi/xDebiOrani
	xAlan=Math.PI*Math.pow(Cap,2)/4
	xHiz=xDoluAkistaDebi/xAlan

	D=Cap-Lamda(k,Cap,ReynoltSayisi(xHiz,Cap,KinVizk))*Math.pow(xHiz,2)/(2*9.81*Egim)
	return (D)
}

function MoodyCapTurev(Cap, Debi,Egim, DolOrani, k, KinVizk,modycap) {
	var dh=0.00001, A
	A=MoodyCapFonk(Cap+dh,  Debi,Egim, DolOrani, k, KinVizk)
	return ((A-modycap)/dh)
}

function MoodyCap( Debi, Egim, DolOrani, k, KinVizk)
{
	// Debi  m3/s
	// k    m
	// Kin. vizk m2/s
	var x1, x2, fnc, trv
  	x1 = Math.sqrt(4*Debi/Math.PI/1.5)
  	while(true)
  	{
	  	fnc=MoodyCapFonk(x1, Debi,Egim, DolOrani, k, KinVizk);
	  	trv=MoodyCapTurev(x1, Debi,Egim, DolOrani, k, KinVizk,fnc);
  		x2 = x1 - fnc /  trv;
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break;
    	}
    	x1 = x2;
   	} 
	return(x1)
}
function MoodyCapBasincliFonk(Cap, Debi,Egim, k, KinVizk) {
	var xAlan, xHiz, D
	xAlan=Math.PI*Math.pow(Cap,2)/4
	xHiz=Debi/xAlan
	D=Cap-Lamda(k,Cap,ReynoltSayisi(xHiz,Cap,KinVizk))*Math.pow(xHiz,2)/(2*9.81*Egim)
	return (D)
}

function MoodyCapBasincliTurev(Cap, Debi,Egim, k, KinVizk,modycap) {
	var dh=0.00001, A
	A=MoodyCapBasincliFonk(Cap+dh,  Debi,Egim, k, KinVizk)
	return ((A-modycap)/dh)
}

function MoodyCapBasincli( Debi, Egim, k, KinVizk)
{
	// Debi  m3/s
	// k    m
	// Kin. vizk m2/s
	var x1, x2, fnc, trv
  	x1 = Math.sqrt(4*Debi/Math.PI/1.5)
  	while(true)
  	{
	  	fnc=MoodyCapBasincliFonk(x1, Debi,Egim, k, KinVizk);
	  	trv=MoodyCapBasincliTurev(x1, Debi,Egim, k, KinVizk,fnc);
  		x2 = x1 - fnc /  trv;
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break;
    	}
    	x1 = x2;
   	} 
	return(x1)
}

function KutterHiz(iccap,egim,KutterKats)
{ 
	var khv,Rh,a,b,c
	Rh=iccap/4.0;
	a=Math.sqrt(Rh)
	b=Math.sqrt(Rh*egim)
	c=KutterKats*1.0+Math.sqrt(Rh)
	khv=100*Math.sqrt(Rh)*Math.sqrt(Rh*egim)/(KutterKats*1.0+Math.sqrt(Rh))
	return(khv)
}

function KutterCapFonk(Cap, Debi, Egim, DolOrani, KutterKats)
{
	var xDebiOrani,xDoluAkistaDebi,xAlan,xHiz,Delta,x1

	xDebiOrani=KanalDebiOrani(DolOrani)
	xDoluAkistaDebi=Debi/xDebiOrani
	xAlan=Math.PI*Math.pow(Cap, 2)/4
	xHiz=xDoluAkistaDebi/xAlan

	Delta=Math.pow(xHiz,2)+100*xHiz*KutterKats*Math.sqrt(Egim)
	x1=(xHiz+Math.sqrt(Delta))/200/Math.sqrt(Egim)
	return(Cap-Math.pow(x1,2)*4)
}

function KutterCapTurev(Cap, Debi, Egim, DolOrani, KutterKats,fonk) {
	var dh=0.00001
	return ((KutterCapFonk(Cap+dh, Debi, Egim, DolOrani, KutterKats)-fonk)/dh)
}

function KutterCap(Debi, Egim, DolOrani, KutterKats)
{
	// Debi  m3/s
	var x1, x2, fnc, trv
  	x1 = Math.sqrt(4*Debi/Math.PI/1.5)
  	while(true)
  	{
	  	fnc=KutterCapFonk(x1, Debi, Egim, DolOrani, KutterKats)
	  	trv=KutterCapTurev(x1, Debi, Egim, DolOrani, KutterKats,fnc)
  		x2 = x1 - fnc /  trv
  		if (Math.abs(x2 - x1) < 0.0001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}


function KutterEgim(Hiz,iccap,KutterKats)
{
	return(Math.pow(Hiz*(KutterKats+Math.sqrt(iccap/4))/100/(iccap/4),2))
}

function ManningHiz(iccap,egim,ManKats)
{
	return(Math.pow(iccap/4.,2/3)*Math.pow(egim,1/2)/ManKats)
}

function ManningCapFonk(Cap, Debi, Egim, DolOrani, ManKats)
{
	var xDebiOrani,xDoluAkistaDebi,xAlan,xHiz

	xDebiOrani=KanalDebiOrani(DolOrani)
	xDoluAkistaDebi=Debi/xDebiOrani
	xAlan=Math.PI*Math.pow(Cap,2)/4.
	xHiz=xDoluAkistaDebi/xAlan

	return(Cap-Math.pow(xHiz*ManKats/Math.pow(Egim,1./2.),3./2.)*4)
}
function ManningCapTurev(Cap, Debi, Egim, DolOrani, ManKats,fonk) {
	var dh=0.00001, A
	A=ManningCapFonk(Cap+dh, Debi, Egim, DolOrani, ManKats)
	return ((A-fonk)/dh)
}
function ManningCap(Debi, Egim, DolOrani, ManKats)
{
	// Debi  m3/s
	var x1, x2, fnc, trv
  	x1 = Math.sqrt(4*Debi/Math.PI/1.5)
  	while(true)
  	{
	  	fnc=ManningCapFonk(x1, Debi, Egim, DolOrani, ManKats)
	  	trv=ManningCapTurev(x1, Debi, Egim, DolOrani, ManKats,fnc)
	//  alert ("fnc: "+fnc+"\ntrv: "+trv)
  		x2 = x1 - fnc /  trv
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function ManningEgim(Hiz,iccap,ManKats)
{
	return(Math.pow(Hiz*ManKats/Math.pow(iccap/4,2./3.),2.))
}

function HazzenHiz(iccap,egim,HazzenKatsayisi)
{
	return(0.849*HazzenKatsayisi*Math.pow(iccap/4.,0.63)*Math.pow(egim,0.54))
}

function HazzenCapFonk(Cap, Debi, Egim, HazzenKatsayisi)
{
	var xAlan,xHiz

	xAlan=Math.PI*Math.pow(Cap,2)/4.
	xHiz=Debi/xAlan

	return(Cap-4*Math.pow(xHiz/HazzenKatsayisi/Math.pow(Egim,0.54),1.0/0.63))
}
function HazzenCapTurev(Cap, Debi, Egim, HazzenKatsayisi,fonk) {
	var dh=0.00001, A
	A=HazzenCapFonk(Cap+dh, Debi, Egim, HazzenKatsayisi)
	return ((A-fonk)/dh)
}
function HazzenCap(Debi, Egim, HazzenKatsayisi)
{
	// Debi  m3/s
	var x1, x2, fnc, trv
  	x1 = Math.sqrt(4*Debi/Math.PI/1.5)
  	while(true)
  	{
	  	fnc=HazzenCapFonk(x1, Debi, Egim, HazzenKatsayisi)
	  	trv=HazzenCapTurev(x1, Debi, Egim, HazzenKatsayisi,fnc)
	//  alert ("fnc: "+fnc+"\ntrv: "+trv)
  		x2 = x1 - fnc /  trv
		//alert(fnc+":"+trv+":"+x1+":"+x2)
  		if (Math.abs(x2 - x1) < 0.000001)
    	{
      		break
    	}
    	x1 = x2
   	} 
	return(x1)
}

function HazzenEgim(Hiz,iccap,HazzenKatsayisi)
{
	return(Math.pow(Hiz/0.849/HazzenKatsayisi/Math.pow(iccap/4,0.63),1.0/0.54))
}


