FINISH /CLEAR,START /PREP7 ! No polynomial elements /PMETH,OFF,1The resultant field map of the weighting potential is called PRNSOL.lis and it is accompanied by an ELIST.lis file that contains the mesh structure, an NLIST.lis file with node coordinates and an MPLIST.lis file with material properties. These 3 files must be kept together in a directory from where they are read with the following Garfield commands:! Set electric preferences KEYW,PR_ELMAG,1 KEYW,MAGELC,1
! Select element ET,1,SOLID123
! Material properties MP,PERX,1,1e10 ! Metal MP,RSVX,1,0.0 ! MP,PERX,2,1.0 ! Gas MP,PERX,3,4.0 ! Permittivity of the FR4
! Construct the strips in mm w = 4 ! Strip width l = 10 ! Length modeled along the wire pitch = 2 ! Wire pitch h = 0.10 ! Strip thickness open = 0.500 ! Gap between strips gap = 2.5 ! Gap between strip and wire d = 0.050 ! Wire diameter sub = 2 ! Substrate thickness BLOCK, -pitch/2, pitch/2, 0, h, -w/2, w/2 ! 1: Strip to be read out BLOCK, -pitch/2, pitch/2, 0, h, -l/2, -w/2-open ! 2: Skirt 1 BLOCK, -pitch/2, pitch/2, 0, h, w/2+open, l/2 ! 3: Skirt 2 BLOCK, -pitch/2, pitch/2, -sub, 0, -l/2, l/2 ! 4: Substrate WPOFFS,,,-l/2 CYL4, 0, gap, d/2, , , ,l ! 5: Anode wire WPOFFS,,,l/2 BLOCK, -pitch/2, pitch/2, -sub, 2*gap, -l/2, l/2 ! 6: Gas
! Subtract the strips and wires from the gas VSEL, ALL VSBV,6,ALL,,,KEEP ! gas becomes 7
! Glue everything together, 1 = strip, 2 = skirt, 3 = skirt, 5 = wire, 6 = substrate, 7 = gas VSEL,ALL VGLUE, ALL
! Colour the parts /COLOR, VOLU, YELLOW, 1 ! Read-out strip /COLOR, VOLU, GREEN, 2 ! Skirt /COLOR, VOLU, GREEN, 3 ! Skirt /COLOR, VOLU, RED, 6 ! Substrate
! Assign material attributes VSEL, S, VOLU, , 6 ! FR4 VATT, 3 VSEL, S, VOLU, , 1 ! strip VSEL, A, VOLU, , 2 ! skirt VSEL, A, VOLU, , 3 ! skirt VSEL, A, VOLU, , 5 ! wire VATT, 1 VSEL, S, VOLU, , 7 ! gas VATT, 2
! Voltage boundaries for a weighting field VSEL,S,,,1 ASLV, S DA, ALL, VOLT, 1 ! Readout strip VSEL,S,,,2 VSEL,A,,,3 VSEL,A,,,5 ASLV, S DA, ALL, VOLT, 0 ! All other metal VSEL,S,,,7 ASLV, S ASEL, R, LOC, Y, 2*gap DA, ALL, VOLT, 0 ! Cathode plane without strips VSEL,S,,,7 ASLV, S ASEL, R, LOC, X, -pitch/2 DA, ALL, SYMM ! Continuity VSEL,S,,,7 ASLV, S ASEL, R, LOC, X, +pitch/2 DA, ALL, SYMM ! Continuity VSEL,S,,,7 ASLV, S ASEL, R, LOC, Z, -l/2 DA, ALL, SYMM ! Continuity VSEL,S,,,7 ASLV, S ASEL, R, LOC, Z, +l/2 DA, ALL, SYMM ! Continuity VSEL,S,,,6 ASLV, S ASEL, R, LOC, Y, -sub DA, ALL, VOLT, 0 ! Backplane
! Meshing VSEL, ALL ASLV, S
MSHKEY,0 SMRT, 6 VMESH, ALL
! Solve the field /SOLU SOLVE FINISH
! Display the solution /POST1 /EFACET,1 PLNSOL, VOLT,, 0
! Write the solution to files /OUTPUT, PRNSOL, lis PRNSOL /OUTPUT
/OUTPUT, NLIST, lis NLIST,,,,COORD /OUTPUT
/OUTPUT, ELIST, lis ELIST /OUTPUT
/OUTPUT, MPLIST, lis MPLIST /OUTPUT
&CELL plane y=0 v=0 z-strip -0.2 0.2 gap 0.5 label b // Create a strip called "B" plane y=0.5 v=0 rows s 1 0.0050 0 0.25 1200In the above example, an ion is drifted from the vicinity of the anode wire towards the cathode plane that is not read out. The signal induced by this moving charge is computed twice:periodicity x=0.25
&OPTIMISE Global bin `csc.bin` If exist(bin) Then // Read binary if it exists read-field-map {bin} Else field-map files weighting-field "PRNSOL.lis" label A ... // Call this weighting field "A" units=mm ... ansys-solid-123 ... x-periodic z-periodic save-field-map {bin} // Otherwise, create a binary Endif
&GAS get "Ar_80_CO2_20.gas" // Assumes the transport file exists add ion-mobility 1.5e-6
&SIGNAL select a b // Select both weighting fields area -0.25 0 -0.5 0.25 0.5 0.5 window 0 0.025
reset signals Call drift_ion(0.0025, 0.26) Call add_signals Call get_signal(1,time1,dir1,cross1) // Retrieve the finite element signal ("A") Call get_signal(2,time2,dir2,cross2) // Retrieve the no-wire signal ("B")
Call plot_frame(minimum(time1 & time2), minimum(dir1+cross1 & dir2+cross2), ... maximum(time1 & time2), maximum(dir1+cross1 & dir2+cross2), ... `Time [microsec]`, `Current`, `Comparing weighting fields`) Call plot_line(minimum(time1 & time2), 0, maximum(time1 & time2), 0, `comment`) Call plot_line(time1, dir1+cross1, `function-1`) Call plot_line(time2, dir2+cross2, `function-2`) Call plot_end
area view x=0 plot-field vector
The reason for this difference readily becomes apparent when comparing the weighting field maps (left: finite elements, including the wire, right: neglecting the wire):
This example uses ANSYS, which is unit-free for what concerns distances. This affords flexibility as long as only symmetry and voltage boundary conditions are used - voltage and length units are decoupled. Charges in contrast are coupled to voltages both via \ε\<SUB\>0\</SUB\> and via an implicit length, as can be seen from the expression for a potential generated by a point charge:
q V = -------- 4 \π \ε\<SUB\>0\</SUB\> rThis leads to two scaling factors:\ε\<SUB\>0\</SUB\> ~ 8.854\×10\<SUP\>-14\</SUP\> C/(V.cm)
In ANSYS, charges can be entered as volume charge densities or as surface charge densities (amongst other possibilities). In case only the total charge is known, then this charge has to be divided by the volume or the surface area of the charge carrier. Example for a volume charge:
! Parameters of the device unit = 1000 ! Units: 1000 for mm, 100 for cm, 1 for m r = 0.1 ! Radius [mm] pi = 3.14159265 ! pi qe = 1.60217646e-19 ! Electron charge [C] charge = 12345*unit*qe ! Total charge in the deviceWhen surface charges are used, an additional precaution needs to be taken in that the surface area for e.g. a sphere has to be multiplied by an ununderstood factor of 2:! Create a ball which will act as charge carrier SPH4,0,0,r
! Distribute charge in the volume of the ball VSEL, S, VOLU, ,1 BFV,ALL,CHRG,charge/(4.0*pi*r*r*r/3.0)
! Distribute charges over the surfaces of the ball VSEL, S, VOLU, ,1 ASLV, S SFA,ALL,,CHRGS,charge/(2*4.0*pi*r*r)It is therefore strongly recommended to verify the integral charge as follows:
Global r = 0.1 // sufficiently large to wrap around all charges Global eps0 = 8.854e-14 // C/(V.cm) Global qe = 1.60217646e-19 // C Call integrate_charge(0, 0, 0, r, qi) Say "Electron charges: {qi*4*pi*eps0/qe}"
Formatted on 21/01/18 at 16:55.