This member has written at least
317 posts and created at least
29 threads on this forum
since joining in

Apr 2017.

Erik

Thanks for link

nice collection...

by the way do you ever made program that can simulate

electrical current density on metal surfaces?

or maybe something similar?

why i ask ... because i need some simple method to do that in BASIC

tnx..

This member has written at least
239 posts and created at least
60 threads on this forum
since joining in

Nov 2017.

Damnit Jim; I'm a software programmer not an engineer!!

This member has written at least
317 posts and created at least
29 threads on this forum
since joining in

Apr 2017.

well Jim

i am not engineer too so what now? ..heh eh

I just say maybe you know?

This member has written at least
317 posts and created at least
29 threads on this forum
since joining in

Apr 2017.

Hey a Pete-Dete

It is not SF and i found some strange matLab code but i dont get it how work.

Who knows maybe something exists in some old qb45 code or in Visual basic but i

simply cannot found something useful

This member has written at least
317 posts and created at least
29 threads on this forum
since joining in

Apr 2017.

Woah !

I found it ,,damn it is in python but i must try

i will use WinPython 247 to test code..

i hope that will work and that can be translated to BASIC -dialect

-code////////////////////////////////////////////////////////////////////

import math

from math import cos, sin, sqrt, atan2, acos

def PatchFunction(thetaInDeg, phiInDeg, Freq, W, L, h, Er):

"""

Taken from Design_patchr

Calculates total E-field pattern for patch as a function of theta and phi

Patch is assumed to be resonating in the (TMx 010) mode.

E-field is parallel to x-axis

W......Width of patch (m)

L......Length of patch (m)

h......Substrate thickness (m)

Er.....Dielectric constant of substrate

Refrence C.A. Balanis 2nd Edition Page 745

"""

lamba = 3e8 / Freq

theta_in = math.radians(thetaInDeg)

phi_in = math.radians(phiInDeg)

ko = 2 * math.pi / lamba

xff, yff, zff = sph2cart1(999, theta_in, phi_in) # Rotate coords 90 deg about x-axis to match array_utils coord system with coord system used in the model.

xffd = zff

yffd = xff

zffd = yff

r, thp, php = cart2sph1(xffd, yffd, zffd)

phi = php

theta = thp

if theta == 0:

theta = 1e-9 # Trap potential division by zero warning

if phi == 0:

phi = 1e-9

Ereff = ((Er + 1) / 2) + ((Er - 1) / 2) * (1 + 12 * (h / W)) ** -0.5 # Calculate effictive dielectric constant for microstrip line of width W on dielectric material of constant Er

F1 = (Ereff + 0.3) * (W / h + 0.264) # Calculate increase length dL of patch length L due to fringing fields at each end, giving total effective length Leff = L + 2*dL

F2 = (Ereff - 0.258) * (W / h + 0.8)

dL = h * 0.412 * (F1 / F2)

Leff = L + 2 * dL

Weff = W # Calculate effective width Weff for patch, uses standard Er value.

heff = h * sqrt(Er)

# Patch pattern function of theta and phi, note the theta and phi for the function are defined differently to theta_in and phi_in

Numtr2 = sin(ko * heff * cos(phi) / 2)

Demtr2 = (ko * heff * cos(phi)) / 2

Fphi = (Numtr2 / Demtr2) * cos((ko * Leff / 2) * sin(phi))

Numtr1 = sin((ko * heff / 2) * sin(theta))

Demtr1 = ((ko * heff / 2) * sin(theta))

Numtr1a = sin((ko * Weff / 2) * cos(theta))

Demtr1a = ((ko * Weff / 2) * cos(theta))

Ftheta = ((Numtr1 * Numtr1a) / (Demtr1 * Demtr1a)) * sin(theta)

# Due to groundplane, function is only valid for theta values : 0 < theta < 90 for all phi

# Modify pattern for theta values close to 90 to give smooth roll-off, standard model truncates H-plane at theta=90.

# PatEdgeSF has value=1 except at theta close to 90 where it drops (proportional to 1/x^2) to 0

rolloff_factor = 0.5 # 1=sharp, 0=softer

theta_in_deg = theta_in * 180 / math.pi # theta_in in Deg

F1 = 1 / (((rolloff_factor * (abs(theta_in_deg) - 90)) ** 2) + 0.001) # intermediate calc

PatEdgeSF = 1 / (F1 + 1) # Pattern scaling factor

UNF = 1.0006 # Unity normalisation factor for element pattern

if theta_in <= math.pi / 2:

Etot = Ftheta * Fphi * PatEdgeSF * UNF # Total pattern by pattern multiplication

else:

Etot = 0

return Etot

def sph2cart1(r, th, phi):

x = r * cos(phi) * sin(th)

y = r * sin(phi) * sin(th)

z = r * cos(th)

return x, y, z

def cart2sph1(x, y, z):

r = sqrt(x**2 + y**2 + z**2) + 1e-15

th = acos(z / r)

phi = atan2(y, x)

return r, th, phi

////////////////////////////////////////////////////////////////

This member has written at least
317 posts and created at least
29 threads on this forum
since joining in

Apr 2017.

yeah multi returns

but code looks to me very clear,,right