//VerilogA for passive,jointer3,veriloga
`include "constants.vams"
`include "disciplines.vams"

module jointer3(Ipow1,Iphase1,Ilam1,Ipow2,Iphase2,Ilam2,Ipow3,Iphase3,Ilam3,Opow,Ophase,Olam);
	parameter real n1 = 0.3333 from [0:1];
	parameter real n2 = 0.3333 from [0:1];
	parameter real n3 = 0.3333 from [0:1];

	input Ipow1,Iphase1,Ilam1,Ipow2,Iphase2,Ilam2,Ipow3,Iphase3,Ilam3;
	output Opow,Ophase,Olam;
	electrical Ipow1,Iphase1,Ilam1,Ipow2,Iphase2,Ilam2,Ipow3,Iphase3,Ilam3,Opow,Ophase,Olam;
	
	real r1,i1,r2,i2,r3,i3,ro,io;
	real iph1,iph2,iph3,oph;

	analog begin
		iph1=V(Iphase1)/360.0*2*`M_PI;
		iph2=V(Iphase2)/360.0*2*`M_PI;
		iph3=V(Iphase3)/360.0*2*`M_PI;
		r1=sqrt(n1*V(Ipow1))*cos(iph1);
		i1=sqrt(n1*V(Ipow1))*sin(iph1);
		r2=sqrt(n2*V(Ipow2))*cos(iph2);
		i2=sqrt(n2*V(Ipow2))*sin(iph2);
		r3=sqrt(n3*V(Ipow3))*cos(iph3);
		i3=sqrt(n3*V(Ipow3))*sin(iph3);
		ro=r1+r2+r3;
		io=i1+i2+i3;
		oph=atan2(io,ro)/(2*`M_PI)*360.0;

		V(Ophase) <+ oph;
		V(Opow) <+ pow(ro,2)+pow(io,2);
		V(Olam) <+ (V(Ilam1)+V(Ilam2)+V(Ilam3))/3;
	end
endmodule