Èvut fs Ústav procesní a zpracovatelské...

28
1 ČVUT FS Ústav procesní a zpracovatelské techniky Kolimované detektory Analýza dílčích problémů a dokumentace programového vybavení Úvod – cíle projektu 1. Globální strategie řešení problému kolimovaných detektorů 2. Transformace souřadnic 3. Algoritmy kolimovaného detektoru 4. Odezva kolimovaných detektorů z výsledků CFD 5. Programy COLIDET a COLIPT Autor: Žitný /pf/work/colim/kolimdet.doc Datum: 14.3.2002, poslední aktualizace 21.5.

Upload: others

Post on 30-Jan-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

1

ČVUT FS Ústav procesní a zpracovatelské techniky

Kolimované detektoryAnalýza dílčích problémů a dokumentace programového vybavení

Úvod – cíle projektu1. Globální strategie řešení problému kolimovaných detektorů2. Transformace souřadnic3. Algoritmy kolimovaného detektoru4. Odezva kolimovaných detektorů z výsledků CFD 5. Programy COLIDET a COLIPT

Autor: Žitný

/pf/work/colim/kolimdet.docDatum: 14.3.2002, poslední aktualizace 21.5.

2

Úvod

Hlavním cílem celého projektu „kolimovaných detektorů“ je zjistit, zda je experimentálnítechnika využívající radioindikátory a kolimované detektory schopna ověřovat výsledky CFDanalýzy. Pravděpodobná odpověď zní někdy ano a někdy ne. Ke zpřesnění této poněkud vágníodpovědi se projekt snaží kvantitativně porovnat vlivy inherentní nepřesnosti experimentálnímetody a na druhé straně vliv neurčitosti CFD modelu. Je zřejmé, že experiment bude vhodnýtehdy, bude-li vliv neurčitých parametrů experimentální metody na odezvy kolimovaného detektorumenší než vliv neurčitostí CFD modelu. Vhodnost či nevhodnost experimentu pro určitou konkrétníaplikaci se projekt snaží kvantifikovat kriteriem

fuai

phtE∆+∆+∆+∆

∆+∆+∆=

kde symboly ∆ označují integrální normy rozdílu vypočtených odezev kolimovaných detektorů přimaximální změně parametrů CFD modelu nebo experimentu v předpokládaném rozsahu jejichneurčitosti.

∆t neurčitost použitého modelu proudění (laminár, k-ε, RNG,…)∆h aproximační chyba (porovnání odezev pro různé hustoty sítě a různý řád aproximací)∆p neurčitost vlastností modelovaných látek (termofyzikální parametry), vstupních profilů atd.

∆i neurčitost nástřiku značkovací látky (porovnání odezev spočítaných pro různé polohy místanástřiku /např. délka jehly, nástřik kolmo k proudu/ a rychlosti nátoku značkovací látky)

∆a neurčitost daná zjednodušujícími předpoklady algoritmů kolimace a stanovení součiniteleabsorpce záření (porovnání odezev dle modelů kolimátorů 1 až 6 pro různé hodnoty a)

∆u narušení rychlostního pole nástřikem značkovací látky. ∆f vliv fluktuační složky odezvy a vliv pozadí.

Pro odhad každé z těchto hodnot ∆k je třeba provést alespoň dvě numerické simulace(výjimkou je ∆a a ∆f - tyto faktory neurčitosti stačí získat jen různými metodami zpracování téhožvýsledku CFD simulace). Takto vypočtená hodnota „smysluplnosti experimentu“ E není konstantnía závisí na pozici detektorů, kterou lze na základě E-kriteria optimalizovat. Teprve poté a jen tehdy,když Eoptimální>1, lze experiment doporučit. Stanovení E-kriteria je pracné a už samo o sobě jeargumentem proti nasazení experimentu. Jedním z cílů projektu je tudíž propočítat co nejvícepřípadových studií tak, aby bylo možné alespoň rámcově vymezit oblasti aplikací s vysokou anaopak velmi nízkou hodnotou E-kriteria. Z těchto případových studií by měla vyplynout ivýznamnost jednotlivých faktorů neurčitosti, která by byla vodítkem při vylepšování jak CFDmetod tak i metod experimentálních.

Vytvořený software pro modelování odezev kolimovaných detektorů na základě CFD dat bybyl součástí připravovaného souboru programů RTD čtvrté generace.

Pro dosažení uvedených cílů je třeba vypracovat metodiku a software pro zpracování odezevkolimovaných detektorů a právě tomuto tematu je věnována předkládaná zpráva.

3

1. Globální strategie řešení problému kolimovaných detektorů

Předpokládejme, že objem vyšetřovaného aparátu je rozdělen na konečné elementy Ωe typučtyřstěn nabo šestistěn, jejichž vrcholy jsou uzlové body xi,yi,zi. Výsledkem CFD jsou uzlovékoncentrace značkovací látky ci v časech t1,t2,…

Koncentrace značkovací látky je monitorována kolimovanými detektory, jejichž odezva jeobecně dána integrálem

∑ ∫∫ΩΩ

Ω=Ω=e e

dzyxjzyxtcdzyxjzyxtctJ ),,(),,,(),,(),,,()( (1)

kde j(x,y,z) je odezva detektoru na značkovací látku s jednotkovou koncentrací v jednotkovémobjemu, která se nachází v místě x,y,z (jednoduše řečeno odezva na bodový zdroj s jednotkovouaktivitou).

A. Experimentální stanovení bodové odezvy

Funkce j(x,y,z) může být stanovena experimentálně interpolací hodnot odezev na bodovýzdroj v místě xk,yk,zk. Tento postup může být úspěšný při splnění následujících předpokladů:• Síť bodů (poloh bodových zářičů) je dostatečně hustá, zejména v blízkosti detektorů.• Podaří se realizovat dokonale izotropní a velmi malý zdroj záření (průměr zdroje by měl být jen

zlomkem tloušťky koncentrační mezní vrstvy).• Je třeba zajistit, aby aktivita zdroje byla konstantní a aby byla správně odříznuta hodnota

pozadí.O úspěšnosti tohoto postupu rozhoduje použitá interpolační formule, správněji asi funkce j(x,y,z)stanovená regresní analýzou bodových odezev j(xk,yk,zk). Použitá regresní funkce může býtodvozena na základě teorie kolimovaných detektorů. Tato metoda je pak vlastně totožná s algoritmydetektorů (viz následující odstavec B), ale parametry modelů, jako je např. součinitel útlumuprostředí, či úhel vidění, už nejsou konstanty, nýbrž funkce x,y,z. Tyto funkce je třeba aproximovatnějakými dalšími aproximačními vztahy, třeba polynomy x,y,z, jejichž koeficienty se určí nelineárníregresní analýzou. Pozn.: Silným argumentem proti použití této metody je právě fakt, že se jedná onelineární a ne lineární regresní analýzu, navíc s poměrně velkým počtem hledaných parametrů.Jedinou šanci na úspěch by mohl mít zmíněný postup tehdy, když by se použily modelykolimovaných detektorů s nekorigovanými parametry, ale se scale-faktorem, vyjádřeným jakolineární kombinace zvolených bázových funkcí, např. polynomů:

),,(...)(),,( mod2

43210 zyxjxazayaxaazyxj el+++++= . (2)Identifikace koeficientů ai metodou nejmenších čtverců odchylek od experimentálních dat by pakvedla jen na lineární regresi. Tento postup může dát rozumné výsledky ale pouze tehdy, kdyžnejsou teoretické predikce kolimovaných detektorů příliš odlišné od experimentu a jedná se tedy jeno malou korekci teoretického modelu. To je dáno tím, že polynomiální scale-up nemá žádnéfyzikální zdůvodnění a navíc jsou jeho asymptotické vlastnosti pro velké hodnoty x,y,z zcelanevhodné.

Zdánlivě jednodušší alternativou je použít některou abstraktní interpolační formuli, tj. nebratv úvahu charakteristiky konkrétních detektorů (modely kolimátorů). Jsou zde zase dvě možnosti:Pokud se podaří rozložit objem vyšetřovaného aparátu na konečné elementy jejichž vrcholy jsoupozice bodového zdroje, je možné interpolovat v jednotlivých elementech (např. aproximačnímipolynomy, jejichž proměnnými jsou objemové souřadnice čtyřstěnných elementů). Rozklad 3Doblasti na elementy s fixně definovanou množinou uzlů je ovšem krajně náročný problém, navíc snejistým výsledkem – záleží na konfiguraci uzlů (při jejich nevhodném rozmístění bude síťelementů silně deformovaná a mít špatné aproximační vlastnosti). Druhou možností je použíttakovou interpolační formuli, která vůbec nevyžaduje rozklad oblasti na elementy. Příkladem tétocesty je metoda vážených vzdáleností, kterou uvádí např. Thýn J.et al Analysis and diagnostics…

4

=

== n

kmk

n

kmk

kkk

l

lzyxj

zyxj

1

1

1

),,(

),,( (3)

kde lk je vzdálenost bodu x,y,z od k-tého měřeného místa. Při aplikaci metody vážených vzdálenostíje ale třeba hledat optimální hodnotu exponentu m a především optimální počet i způsob výběruinterpolačních bodů (optimální počet bodů formule n může být podstatně menší než je počet pozicbodového zdroje). Při výběru optimální skupiny uzlů použitých pro interpolaci (3) je např. možnérozdělit objem aparátu na elementy a každému elementu přiřadit informace o indexech uzlů v nichžby se mělo interpolovat. Problém rozkladu oblasti Ω na elementy je v tomto případě jednoduchý,protože geometrie elementů nemusí být vůbec vázaná na souřadnice uzlů. Výběr interpolačníchuzlů dokonce ani nemusí být vázán na generování konečných elementů: stačí stanovit kriteriumvýběru, např. že pro interpolaci se použije n nejbližších uzlů, nebo jen ty uzly, jejichž vzdálenost odx,y,z není větší než nějaká kritická hodnota. Postupy s definovaným kriteriem výběru mohou býtvýhodné v případě, kdy celkový počet experimentálních bodů není příliš velký a prohledávánícelého seznamu je časově únosné.

B. Algoritmy kolimovaných detektorů

V tomto případě se vychází z teoreticky určené odezvy j(x,y,z) získané buď metodou MonteCarlo, nebo některými aproximačními vztahy (metody View Factor, 1R, 3R budou popisovány vKap.3). Výsledkem jsou formule pro odezvu na jednotkový bodový zdroj záření, ale vyjádřené vlokálním souřadném systému detektoru (přesněji v lokálním souřadném systému jednohokolimačního otvoru). Příspěvek jednoho otvoru k celkovému signálu detektoru je funkcí jen dvousouřadnic: vzdálenosti od osy otvoru (r) a vzdálenosti od roviny čela detektoru (ζ). Při použitíalgoritmu, který předpokládá dokonalou absorpci záření materálem kolimátoru, se zdroje záření,nacházející se mimo úhel vidění, vůbec neuplatní. V tomto případě je asi nejvýhodnější integrovatodezvu (1) přímo v lokálním souřadném systému detektoru r,ζ,ψ. Odpovídající postup je založen natransformaci z lokálního cylindrického systému r,ζ,ψ, do kartézského systému x,y,z aparátu ainterpolaci hodnot koncentrací v transformovaných bodech x,y,z. Tento způsob byl použit přiaplikaci algoritmů typu View Factor, a nejobtížnější část problému, interpolace koncentrací, bylařešena technikou pracovně nazývanou „cartesian boxing“ v kombinaci s metodou váženýchvzdáleností, viz ChISA 2000 a diplomová práce Kareš (v tomto případě byl testován CFD modelohmického ohřívače konečněprvkovým programem Cosmos).

Při použití algoritmů kolimace, které uvažují nedokonale stínící kolimátor ovšem ztrácípojem úhlu vidění a tedy i technika integrace v lokálním souřadném systému detektoru svůjvýznam. Integrace v kartézském souřadném systému x,y,z, který je již rozdělen na konečnéelementy nebo kontrolní objemy je koneckonců jednodušší, protože lze použít standardní technikuisoparametrických funkcí a Gaussovu integraci. Přirozeně i v tomto případě lze použít interpolačnímetodu vážených vzdáleností, ale její hlavní přednost – jednoduchost – se příliš neuplatní, protožezde stále zůstává problém výpočtu objemu obecného křivočarého prostorového elementu (a ten byse asi musel řešit stejně jako při integraci isoparametrických funkcí). Metoda integrace přeskonečné elementy vytvořené při řešení metodami CFD je jednoduchá a snadno se programuje.Komplikace se objeví tehdy, když součinitel útlumu media není konstantní a je definovaný pojednotlivých elementech. Pak je nutné se vrátit k technice „cartesian boxing“ a k interpolacimetodou vážených vzdáleností. Tomuto nepříjemnému hybridu se lze vyhnout jen když jesoučinitel útlumu vyjádřen nezávisle na elementech nějakou jednoduchou funkcí x,y,z.

5

Navrhovaná minimální struktura programového vybavení

CFD analýza

Knihovna základních podprogramů pro analýzu kolimovaných detektorů

Programy

FLBAT – soubor programů progenerování příkazů Fluentu(dokumentace Nový)

FLNEF – program pro konverzivýsledků Fluentu do neutrálníchsouborů (dokumentace Nový)

COSES – typové parametrizovanésoubory (session) pro COSMOS(dokumentace Nový)

CONEF – program pro konverzivýsledků Cosmosu do neutrálníchsouborů (dokumentace Nový)

TXYZRZ geometrická transformace x,y,z → r,ζTXYZRZF geometrická transformace x,y,z → r,ζ,ψTRZFXYZ geometrická transformace r,ζ,ψ → x,y,zCOLUNI algoritmy kolimovaných detektorů

FLUENT

COSMOS

COLIDET – odezvy na základěmodelů kolimovaných detektorů

COLIFIT – odezvy na základěmodelu (2) – korekce modelůkolimace na základě bodovýchodezev

COLIEXP – interpolace bodovýchodezev metodou váženévzdálenosti (vpodstatě COL-x –dokumentace Nový)

GRAFXY

6

2. Transformace souřadnic

2.1. Výpočet vzdálenosti bodu se souřadnicemi x,y,z v kartézském souřadném systému od osyválcového otvoru a výpočet vzdálenosti tohoto bodu od roviny čela tohoto válce. Zmíněnýkartézský souřadný systém používá neutrální soubor i soubor dat poloh bodových zdrojůzáření. Válec je definovaný souřadnicemi dvou bodů – středů jeho čel (x1, y1,z1), (x2,y2,z2) apoloměrem d.

Požadovaný výsledek: funkční vztahy pro rd(x,y,z, x1, y1,z1, x2,y2,z2) azd(x,y,z, x1, y1,z1, x2,y2,z2).

Řešení:Uvažujme parametrickou rovnici osy otvoru (parametr t=0 v bodě 1, t=1 v bodě 2)

112 )( xtxxxt +−=

112 )( ytyyyt +−=

112 )( ztzzzt +−=Vzdálenost x,y,z a obecného bodu xt, yt, zt,

2222 )()()( zzyyxxl ttt −+−+−=Pro bod ležící na kolmici je tato vzdálenost nejmenší, tj.

0))(())(())(( 121212 =−−+−−+−− zzzzyyyyxxxx ttt ,odkud plyne hodnota parametru t bodu na kolmici

212

212

212

121121121

)()()())(())(())((

zzyyxxzzzzyyyyxxxxtk −+−+−

−−+−−+−−=

a vzdálenost bodu x,y,z od osy válcového otvoru se tudíž rovná222 )()()( zzyyxxr kkkd −+−+−= .

Vzdálenost mezi bodem k a čelem kolimátoru2

12

12

1 )()()( zzyyxxz kkkd −+−+−= .

2.2. Definice kolimátoru a geometrie jeho otvorů. Uvažuje se kolimátor tvořený maximálnědvěma řadami ni otvorů na kružnicích o poloměrech Ri. Vzájemné úhlové posunutí prvníchotvorů řad je ∆ϕ, otvory jsou v každé řadě rozmístěny rovnoměrně (úhlová vzdálenostsousedních děr 360/ni). Všechny díry v kolimátorech jsou válcové a směřují do ohniska,které leží ve vzdálenost f od čela kolimátoru. Poloha kolimátoru je dána jeho čelem: střed

y

x

z

x,y,z

zd rd

x1,y1,z1

x2,y2,z2

7

má souřadnice xc,yc,zc a sklon jeho roviny je dán dvěma úhly ϑx (pootočení kolem osy x vkladném smyslu) a ϑy (pootočení kolem osy y).

Požadovaný výsledek: charakterizovat n1+n2 otvorů dvojicemi bodů (x1, y1, z1), (x2, y2, z2)jako funkci xc,yc,zc, ϑx, ϑy, n1,n2, R1,R2,f,H, ∆ϕ.

Řešení.Základní krok je stanovení polohy ohniska po natočení o úhly ϑx, ϑy. Uvažujme výchozí

vektor ohniska vycházející z počátku souřadného systému a orientovaný v kladném směru z, tj.výchozí souřadnice x=y=0, z=f.

Po natočení kolem osy x se souřadnice ohniska změní na x=0, y=-f sinϑx, z= f cosϑx akonečně po natočení o úhel ϑy dle osy y a posunutí o xc,yc,zc obdržíme finální souřadnice ohniska

yxcf fxx ϑϑ sincos+=

xcf fyy ϑsin−=

yxcf fzz ϑϑ coscos+= .Analogicky stanovíme i změnu polohy obecného otvoru kolimátoru, jehož výchozí poloha senachází v rovině x-y (kolmé k ose kolimátoru), vzdálenost od počátku je R a úhel natočenívzhledem k ose y je ϕ, viz obr.Výchozí poloha x=-Rsinϕ,y=Rcosϕ,z=0 se po natočení a posunutí změní na

)cossinsinsin(cos1 yyxc Rxx ϑϕϑϑϕ −+=

xc Ryy ϑϕ coscos1 +=)sinsincossin(cos1 yyxc Rzz ϑϕϑϑϕ ++=

Detailněji:Mějme bod o výchozí poloze (0)=(x(0), y(0), z(0)). Pootočení kolem osy x o úhel ϑx do bodu (1) mění pouze souřadnice y a z(1) =(x(0), y(0)cosϑx-z(0) sinϑx, z(0)cosϑx+y(0) sinϑx )Pootočení bodu (1) kolem osy y o úhel ϑy do bodu (2) mění pouze souřadnice x a z(2) =(x(1)cosϑy+z(1) sinϑy, y(1), z(1)cosϑy-x(1) sinϑy )Dosazením za souřadnice bodu (1) získáme výslednou transformaci (2) =( x(0)cosϑy+(z(0)cosϑx+y(0)sinϑx)sinϑy,

y(0)cosϑx-z(0) sinϑx, (z(0)cosϑx+y(0) sinϑx)cosϑy-x(0) sinϑy)

což po dosazení výchozí polohy x(0) =-Rsinϕ, y(0)=Rcosϕ, z(0)=0 povrzuje správnostpředchozího vztahu.

y

x

z

xc,yc,zc

fϑy

f

H x1,y1,z1

x2,y2,z2

Výchozí poloha čela kolimátoru,kolmá k rovině z. Ukázkanatočení kolem osy y.

x

R

8

Souřadnice x1, y1,z1 jsou již souřadnicemi prvního bodu díry. Druhý bod je na spojnici s ohniskem,kterou vyjádříme rovněž v parametrickém tvaru. Souřadnice druhého bodu válcové díry vkolimátoru tloušťky H jsou tudíž

)/1)(( 12 fHxxxx ff +−+=

)/1)(( 12 fHyyyy ff +−+=

)/1)(( 12 fHzzzz ff +−+= .

subroutine txyzrz(x1,y1,z1,x2,y2,z2,x,y,z,rd,zd)cc 1 - celo valcoveho otvoru (souradnice cela kolimatoru)c 2 - libovolny bod za kolimacnim otvoremc x,y,z - bod v nemz je umisten zaric s jednotkovou aktivitouc rd - vypoctena vzdalenost od osy otvoru kolimatoruc zd - vypoctena vzdalenost od roviny celac tk=((x-x1)*(x2-x1)+(y-y1)*(y2-y1)+(z-z1)*(z2-z1))/ / ((x2-x1)**2+(y2-y1)**2+(z2-z1)**2) xk=(x2-x1)*tk+x1 yk=(y2-y1)*tk+y1 zk=(z2-z1)*tk+z1 rd=sqrt((xk-x)**2+(yk-y)**2+(zk-z)**2) zd=sqrt((xk-x1)**2+(yk-y1)**2+(zk-z1)**2) end

subroutine colgeo(xc,yc,zc,thx,thy,nv,rv,f,h,dphi, / x1,y1,z1,x2,y2,z2)cc Vypocet souradnic dvojic bodu, definujicich valcove otvory v kolimatoru.c Poloha kolimatoru je definovana stredem xc,yc,zc a dvema uhly natocenic thx a thy vuci souradnym osam X a Y. Otvory mohou byt az na dvou soustrednychc kruznicich o polomerech Rvi a jsou kolimovany do ohniska na ose kolimatoru.cc xc,yc,zc,thx,thy - stred cela kolimatoru a orientace jeho rovinyc nv(2) - pocty otvoruc Rv(2) - polomeryc f - vzdalenost ohniska od cela kolimatoruc h - tloustka kolimacni deskyc dphi - uhel pootoceni prvniho otvoru mezi dvema radamic Vystupni parametry:c x1,..x2,.. - souradnice cela a konce otvoruc dimension x1(*),y1(*),z1(*),x2(*),y2(*),z2(*),nv(2),rv(2) ctx=cos(thx) cty=cos(thy) stx=sin(thx) sty=sin(thy) xf=xc+f*ctx*sty yf=yc-f*stx zf=zc+f*ctx*cty m=0 do ir=1,2 n=nv(i) r=rv(i) df=2*3.141/n fi=(ir-1)*dphi do i=1,n m=m+1 sinf=sin(fi) cosf=cos(fi) rsq=r*sqrt(sinf**2+(cosf*stx)**2) x1(m)=xc+rsq*sty y1(m)=yc+r*ctx*cosf z1(m)=zc+rsq*cty x2(m)=xf+(x1(m)-xf)*(1+h/f) y2(m)=yf+(y1(m)-yf)*(1+h/f) z2(m)=zf+(z1(m)-zf)*(1+h/f) fi=fi+df enddo enddo end

viz. COLFUN.FOR

9

2.3. Inverzní transformace

Předchozí transformace je založena na stanovení souřadnic r,z v lokálním souřadnému systémukolimovaného detektoru ze zadaných souřadnic v globálním kartézském souřadném systému x,y,z.V případě, že je odezva detektoru stanovována integrací v lokálním souřadném systému detektoru(tzn. jen integrací v oblasti jeho úhlu vidění) je ovšem zapotřebí transformace inverzní, tj. zlokálního souřadného systému, do x,y,z. Takovou transformaci uvádí např. J.Thýn, R. Žitný, T.Čechák, J. Klusoň: Flow structure analysis – flow localization and visualization by radioisotopemethods, CRP Prague 2000, a i z této práce uvádíme krátký výňatek:……..Recent research concerns focused collimated detectors, shown schematically in Fig.14.

Fig.14Focused collimation

The same algorithms can be used, Eqs.(4-9), only spatial rotations (ϕy,ϕz) must beperformed separately for each hole aiming towards the focus, see Fig.14. Rotation ϕz around ζz axismerges ζy and y axis, and rotation ϕy moves the collimator axis ζx to the direction x.

x x z y z y z y= − −( cos sin )cos sinζ ϕ ζ ϕ ϕ ζ ϕ (33a)

z x z y z y z y= − +( cos sin ) sin cosζ ϕ ζ ϕ ϕ ζ ϕ (33b)

y y z x z= +ζ ϕ ζ ϕcos sin (34)

sinϕzf

f

yl

= , sincos

ϕϕy

f

f z

zl

= (35)

where lf is the focused length and xf, yf, zf are cartesian coordinates of focus.….

konec výňatku. Upřímně řečeno, není mi jasné, zda jsou předchozí transformační vztahy(použité zřejmě v programech, které jsem psal pro D.P. Kareš) totožné s těmi, které byly odvozenyv odstavi 2.2. Měly by to být vztahy inverzní a možná vhodnější pro počítání integrální odezvydetektoru. Jsou totiž dvě možnosti: buď integruji v souřadném systému detektoru, tj. jen v oblastijeho úhlu vidění a pak potřebuji transformaci do globálního kartézského systému x,y,z (33a…),nebo integruji přes objem aparátu a pak potřebuji transformaci do souřadného systému detektoru.

3. Algoritmy kolimovaných detektorů

Na meetingu IAEA Vienna 99 byl uveden základní algoritmus kolimovaných detektorů, metodaView Factor, viz. R.Žitný, J.Thýn: RTD software for identification of spatially localised models anddata standardisation, Vienna 1999. Klíčová část tohoto příspěvku zní takto:……

- Collimator is the lead plate of the thickness h having cylindrical hole of diameter d.- Scattering and reflections can be neglected (this assumption can be approximately satisfied if for

example an energy window is used)

What is the radiation intensity detected by a perfectly shielded collimator aligned with the axis z of the cylindrical coordinateirradiated from the point (z,r) can be calculated as the inters/projection of aperture/ and the white /hole/) having radii

Rd

Rd h z

z1 22 2= =

+;

( ), and distance of centers e =

The area of intersection of two overlapping discs equals

S Rb

eRR

beR

b= + −12

122

2arcsin arcsin ,

where b R R e R R= − − −12

4 12

22 2

12

22 2( ) .

Knowing irradiated area S, it is possible to calculate the fracelement of volume (dV=dz dr r dϕ) which is absorbed by detecto

dJSz

r zc t r r z dz dr rd=

+⋅ ⋅

4 2 2 3 2πϕ ϕ ϕ

( )( , cos , sin , )/

and this contribution has to be integrated within the cone z∈(0the attenuation could be respected numerical integration of inten …. konec výňatku.

Ve zprávě pro CRP meeting v Praze je poprvé uváděnOpět krátký výňatek zprávy J.Thýn, R. Žitný, T. Čechák, J. Klulocalization and visualization by radioisotope methods, CRP Pra…..

This algorithm take into account gamma beam absorption

h

de

z

rF

xy

zR

p

d 12

H

zp

rp

ϕd

10

detector? Consider first the hole in system. Area of detector which isection of two discs (the blue one

hrz

. (3)

(4)

(5)

tion of radiation emitted by smallr

(6)

,∞), r∈(0, z d/h), ϕ∈(0,2π). So thatsity is necessary.

i jednopaprskový algoritmus (1R).soň: Flow structure analysis – flowgue 2000

in shielding.

ig.7 Collimation (geometry)

11

Parametric equation of ray using t=z/zpr r r r t

tz z t

d p d

d d

p

= + −

= + −=

( )( )ϕ ϕ ϕ0 (24)

Intersection point with the cylinder surfacer R

r Rr r

z zR rr r

dp

p d

pd

p d

1

1

1

=

=−

=−−

ϕ ϕ (25)

Intersection point with the planar surface of collimator

r r r rHz

z Hz

z H

d p dp

dp

p

2

2

2

= + −

=−

=

( )

ϕ ϕ (26)

Distance of these to points is the thickness of lead layer

lR

r Rr r

r r rHz

z Hz

Rr Rr r

r r rHz

z Hz

H zR rr r

c

dp

p dd p d

pd

p

p

dp

p dd p d

pd

p

pp

d

p d

=

−− + −

−+

−− + −

−+ −

−−

cos( ) [ ( ) ]cos( )

sin( ) [ ( ) ] sin( ) ( )

ϕ ϕ

ϕ ϕ

2

2 2

(27)

In a similar way the distance between source point p, and the surface of collimator is

l

r r rHz

z Hz

r

r r rHz

z Hz

H zc

d p dp

dp

pp

d p dp

dp

pp

=

+ −−

− +

+ −−

+ −

[ ( ) ]cos( )

[ ( ) ]sin( ) ( )

ϕ

ϕ

2

2 2

(28)

The total length of ray is the sum of these two lengths, but can be expressed in a morestraightforward way

l r r r zd d p d d p= − + +( cos ) ( sin )ϕ ϕ2 2 2 (29)

In view of the fact that the angle between ray and the plane of collimator is

sinφ =zlp

(30)

the resulting expression for detector input corresponding to unit activity at point p is

dJz

le dSp l a l a

dm m c c= − −

4 3π(31)

It is probably impossible to perform integration at the cross-section of collimator, and itwould be necessary to use some form of numerical integration, making the algorithm veryineffective (maybe that Monte Carlo wold be comparable). Therefore a crude simplification, takinginto account only one ray towards the center of detector, could be accepted for sufficiently slimcollimators:

2222 )()( )()( pp

ppm

p

p

p

pc zHH

zr

rlRrz

HHzr

Rl −+−=−+−= (32)

12

Na CHISE 2001 byly prezentovány tyto základní algoritmy, viz. J. Thýn a R. Žitný: Ověřovánímodelů proudění radioindikátory – modely kolimovaných detektorů. ChISA 2001, Srní

Tabulka 1.VIEW FACTOR SINGLE RAY

Function colivf(z,r,d,h,amu) Parameter (pi=3.141) Real l,lh,lh2c z-distance from collimatorc r-radial coordinate of sourcec d-aperturec h-thickness of collimatorc amu-attenuation (=rho * mu) r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2 e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0 elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(4*r12*r22-(e**2-r12-r22)**2)/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*asin(ber1)+r22*asin(ber2)-b else b=sqrt(4*r12*r22-(e**2-r12-r22)**2)/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asin(ber1))+ r22*asin(ber2)-b endif colivf=s*zh*exp(-amu*l) /(2*pi*r12)*(1./lh-1./sqrt(lh2+r12)) end

function colisr(z,r,d,h,amu,acol) parameter (pi=3.141) real lh,lh2cc z-normal distance of source from collimatorc r-radiusc d-aperturec h-thickness of collimatorc amu-attenuation of media c acol-attenuation of collimator c r1=d/2 r12=r1**2 e=h*r/z zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif colisr=zh*exp(-amu*rlm-acol*rlc)/(2*pi*r12)*(1./lh-1./sqrt(lh2+r12)) end

Výsledné vztahy jsou v obou případech velmi jednoduché, např. u metody VF (View Factor) je normovanýsignál detektoru N aproximován vztahem

mm al

d

dal

d

el

Szel

SN −− == 32 44cos

ππψ

, (1)

kde S je ozářená plocha detektoru, ψ je úhel mezi osou detektoru a paprskem záření mířícím do středu detektoru. ld jedélka tohoto paprsku (tj. od bodového zdroje až k detektoru), zatímco lm je délka téhož paprsku, ale jen v oblasti, kdedochází k absorpci záření v mediu. Ozářená plocha detektoru S je rovna ploše detektoru, pokud zdroj záření nenívzdálen od osy detektoru o více než d/2, v opačném případě je detektor částečně zacloněn kolimátorem a ozářenáplocha se musí počítat dle výše uvedeného algoritmu, viz též [3, 4]. Algoritmus VF předpokládá, že materiál kolimátorupředstavuje dokonalé stínění, tj. že zdroj záření, jehož vzdálenost od osy je větší než

r dzh

> +( )12

(2)

je pro detektor neviditelný (tomu odpovídá podmínka [e.ge.r1+r2] ve výše uvedeném programu).

Dle vztahu (1) by však při přiblížení zdroje záření těsně k čelu detektoru rostla jeho odezva do nekonečna, cožneodpovídá skutečnosti. Ilustrujme tento případ na příkladu detektoru (s poloměrem R) bez kolimátoru a s bodovým

z

h

dr

z

h

d

detektor

13

zdrojem záření v místě (rd, zd). Signál detektoru je v tom případě úměrný následujícímu integrálu přes celou plochudetektoru

Nz rdrd

lz rdrd

z r r rrz rdrd

l r rrd

Rd

d d d

Rd

d d

R

= =+ + −

=+ −∫∫ ∫∫ ∫∫

ϕπ

ϕπ ϕ

ϕπ ϕ

π π π

4 4 2 4 2300

2

2 2 2 3 200

2

2 2 3 200

2

( cos ) ( cos )/ / (3)

Omezíme-li se na případ, že zdroj záření je v ose detektoru (rd=0), integrál (3) se zjednoduší.

Nz rdrdl r

zl l R

SzR l l R

Szl

d

d

Rd

d d

d

d d

R l d

d

d=+

= −+

= −+

→∫∫ <<ϕπ π π

π

4 21 1

21 1

42 2 3 200

2

2 2 2 2 2 3( )( ) ( )/ (4)

Porovnáním původního vztahu (1) a (4) plyne, že vhodnější asymptotické vlastnosti pro ld→0 obdržíme modifikacívztahu (1)

NSz

R l l Red

d d

alm= −+

21 1

2 2 2π( ) (5)

což odpovídá příkazu colivf=s*zh*exp(-amu*l)/(2*pi*r12)*(1/lh-1/sqrt(lh2+r12)) použitémna závěr procedury COLIVF i COLISR.

V příloze referátu je uveden i popis třípaprskového algoritmu

V případě, že je průměr detektoru výrazně větší než průměr kolimačního otvoru a dále tehdy, když je stínící vrstvatenká lze použí třípaprskový algoritmus koncepčně shodný s jednopaprskovým (SR). Princip úpravy je patrný z obrázku

Vzdálenost zdroj - detektor

l R r z hi = + +( ) ( )m 2 2 , i=1,2Délka části paprsku v mediu

l lh

h zmi i= −+

( )1

Délka části paprsku v materiálu stínění

l lh

h zR d

R rci i=+

−min( ,

/)

2m

Příspěvek paprsků 2,3 k signálu detektoru, odpovídajícímezikruží zastíněného čela detektoru.

ND d z h

lei

i

al a lmi c ci=− + − −( )( )2 2

332Programová realizace modifikovaného algoritmu

function colisr(z,r,d,h,amu,acol) parameter (pi=3.141) real lh,lh2,l1,l2,lm1,lm2,lc1,lc2 r1=d/2 r12=r1**2 e=h*r/z zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif colisr=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12))det=0.05 br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh)

if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) colisr=colisr+ds*zh/(4*pi)* (exp(-amu*lm1-acol*lc1)/l1**3+ / exp(-amu*lm2-acol*lc2)/l2**3) end

l1

l2

Dd

h z

rR

14

Všechny výše uvedené algoritmy jsou sdruženy do následující procedury COLUNI

function coluni(meth,zs,rsgn,d,hs,amu,acol,det)c c Vypocet odezvy detektoru na zareni prochazejici valcovym otvoremc z bodoveho zarice s jednotkovou aktivitou (vzdaleneho o |rsgn| od osyc valce, a o vzdalenost ZS od cela kolimatoru).cc METH=1 - view factor (bez korekce na blizkou vzdalenost)c METH=2 - view factor (s korekci)c METH=3 - 1R (bez korekce)c METH=4 - 1R (s korekci na blizkost)c METH=5 - 3R detektor o vetsim prumeru nez je prumer diry (bez korekce)c METH=6 - 3R detektor o vetsim prumeru nez je prumer diry s korekcicc ZS,RSGN - poloha bodoveho zdroje s jednotkovou aktivitoucc D - prumer otvoruc HS - delka valcoveho otvoruc AMU - soucinitel utlumu prostredic ACOL- soucinitel utlumu materialu kolimatoruc det - prumer detektoruc parameter (pi=3.141) real l,lh,lh2,l1,l2,lm1,lm2,lc1,lc2 r=abs(rsgn) z=amax1(zs,1e-6) h=amax1(hs,1e-4) select case(method) case(1)cc View factor bez korekcec r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2 e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0 elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*asin(ber1)+r22*asin(ber2)-b else b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asin(ber1))+r22*asin(ber2)-b endif coluni=s*zh*exp(-amu*l)/(4*pi*lh**3) case(2)cc View factor s korekci na blizkou vzdalenostc r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2 e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0 elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2)

15

s=r12*asin(ber1)+r22*asin(ber2)-b else b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asin(ber1))+r22*asin(ber2)-b endif coluni=s*zh*exp(-amu*l)/(2*pi*r12)*(1./lh-1./sqrt(lh2+r12)) case(3)cc 1R bez korekcec r1=d/2 zh=z+h lh=sqrt(zh**2+r**2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/(4*pi*lh**3) case(4)cc 1R s korekcic r1=d/2 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12)) case(5)cc 3R s rozdilnym prumerem detektoru bez korekcec r1=d/2 r12=r1**2 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/(4*pi*lh**3) br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh) if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) col=ds*zh/(4*pi)*(exp(-amu*lm1-acol*lc1)/l1**3+ / exp(-amu*lm2-acol*lc2)/l2**3) coluni=coluni+col case(6)cc 3R s rozdilnym prumerem detektoru s korekcic r1=d/2 r12=r1**2 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then

16

rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12)) br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh) if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) col=ds*zh/(4*pi)*(exp(-amu*lm1-acol*lc1)/l1**3+ / exp(-amu*lm2-acol*lc2)/l2**3) coluni=coluni+col end select end

viz. COLFUN.FOR

17

4. Odezva kolimovaných detektorů z výsledků CFD

Na mezinárodní ChISe 2000 byl uveden referát popisující jeden ze způsobů zpracovánívýsledků CFD. Postup je založen na integraci odezvy v lokálním souřadném systému kolimačníhootvoru, poprvé se zavádí technika „cartesian boxing“ a interpolace metodou vážených vzdáleností.Krátký výňatek:

…Results calculated by a CFD program has the form of ASCII files from which the followinginformation must be extracted (data filtration):

1. Coordinates of nodal points in cartesian coordinate system (x,y,z). Result is a file, where eachrow corresponds to one nodal point: i,x,y,z.

2. Connectivity matrix. Group of points forming element or control volume. It is assumed that theelement is a "brick" fully determined by eight vertices. Result is a file containing nine integernumbers in each row: ie, i1, i2,i3, i4, i5, i6,i7, i8, where ie is index of element, and ij are indices ofnodal points (vertices).

3. Calculated vector of concentrations/temperatures at a selected time step. Results are files (eachfile corresponds to one time step) containing pairs in, cn.

These data are used for calculation of detector responses, according to previously describedprocedure, see Eqs. (1-10). This algorithm evaluates concentrations of tracer in points x,y,z manytimes and effectivity of solution depends upon the speed of interpolation c(t,x,y,z) from the CFDdata. In the case, that the full list of finite elements is to be searched in order to localise the elementcontaining the point x,y,z, the calculations would be unacceptably slow. Therefore it is necessary tofind out a way, how to find out the finite elementdirectly, without necessity to search list of all elements.A possible solution is represented by "cartesianboxing": The investigated object (for example themodel of heater) is covered by very fine equidistantrectangular grid, consisting of NxNyNz cubes (the size ofa cube, hx, hy, hz, should be smaller than the size of thesmallest finite element). Now it is possible to find out amapping between the uniform grid (between centers ofcubes) and elements – this procedure is timedemanding, however it need to be performed just once,giving matrix Mix,iy,iz whose entries are indices of finiteelements. Procedure of identification of finite elementis simple:• Given an arbitrary point x,y,z the indices of mapping matrix M can be idenfified

straightforwardly:ix=int(x/hx)+1, iy=int(y/hy)+1, iz=int(z/hz)+1. (11)

• Value of Mix,iy,iz is the index of finite element .containing the box ix, iy, iz and therefore also thepoint x,y,z.

The second problem is interpolation c(x,y,z) within the selected element (values of concentrationat nodes of element are known). This interpolation would be easy for tetragonal elements (linearintepolation c(x,y,z)=a+bx+cy+dz), however the brick with eight nodes is more difficult. Thereexist the following two more or less standard procedures:1. Isoparametric transformation, see e.g. Zienkiewicz (or any standard finite element textbook).

This is mapping between the coordinate system in a unit cube (coordinates ξ1, ξ2, ξ3) andcoordinate system of element (x,y,z). The transformation explicitly expresses x(ξ1, ξ2, ξ3), y(ξ1,

xz

y

Ny

NzNx

18

ξ2, ξ3), z(ξ1, ξ2, ξ3), but inverse transformation has to be performed numerically. This inversionneed not be done when calculating integrals in FEM (and this is why this form of interpolationis preferred by CFD programs). Unfortunatelly this is not our case, and iterative numericalinversion has to be done.

2. Brick can be split into tetragonal elements and linear interpolation c(x,y,z)=a+bx+cy+dz is usedwithin tetrahedron. However, it is necessary to idenfify the tetragonal subelement containing thepoint x,y,z and this is also time consuming procedure.

With the aim of simplicity and high performance of interpolation we suggest the followingprocedure.

1. Calculate distances l1,l2,...,l8 between the point x,y,z and nodal points of finite element.

2. Approximate the concentration at x,y,z by formula

c x y z

cl

l

i

im

i

im

i

( , , ) = =

=

∑1

8

1

8 1 (12)

where c1,...,c8 are concentrations in nodes of element and exponent m is dimension of space(1-curve, 2-surface, 3-volume).Suggested method fullfils the two basic requirements:• In the case, that the point x,y,z merges with the node j, predicted concentration is cj.• If the concentrations c1,...,c8 are constant, the formula (12) is exact.Remark: Intepolation (12) reduces to linear intepolation for one dimensional case (m=1) – twonode element. See also appendix 2, - numerical experiments for m=3.

c x

cx

cL x

x L x

cxL

cxL

( ) ( )=+

+−

= − +

1 2

1 21 1 1

Remark concerning choice of coordinate system.Global cartesian coordinate system x,y,z can be defined arbitrary, nevertheless from point of

view speed of program it is convenient to identify x,y,z with the coordinate system, wchich wasused in CFD model. Then the positioning of detector (positioning of all holes in collimators) is tobe defined also in the coordinate system of the CFD model. For example in our case we shallassume that all detectors are aligned horizontally (y=const): specification of focused collimatorgeometry is given by point xc, yc, zc (center of front side of collimator), focus length lf and by theincline of collimator ϑ, see Fig.9

Coordinates of focus are given byy yf c= (13-15)x x lf c f= + cosϑ

L

x

c1 c2

xf,yf,zf

xh,yh,zh

xc,yc,zc

z

x

ϑ

lfFig.9 Position of detectors

19

z z lf c f= + sinϑCentres of individual holes in collimator arex x rh c= + sin sinϕ ϑ (16-18)z z rh c= − sin cosϕ ϑy y rh c= + cosϕExample of results is shown in Fig.10, detector looks into the space between electrodes. The results

were calculated for nearly negligible absorption coefficients awater=0.00086 [1/m], asteel=0.0057[1/m] and also for rather large attenuation awater=15.5 [1/m], asteel=138.6 [1/m], corresponding to 99-Technetium, Storm (1973). Accuracy of solution depends not only upon accuracy of CFD data, andquality of interpolation, but also upon the numerical accuracy of integration of Eq.(5). Resultsshown in Fig.10 were integrated using Nx=90, Nr=14, Nϕ=17 intervals in ζ,r,ϕ, cylindrical system ofeach hole, but nearly the same values were obtained for Nx=60, Nr=9, Nϕ=9. It is seen that thefocusing as well as attenuation of radiation has quite negligible effect upon the measured response -the time courses, predicted for one, two, and even twelve holes collimators, are practicallyindistinguishable. The only important factor is view angle – the response, calculated for wide holecollimator (diameter 14 mm, instead of 1 or 5 mm) differs significantly, because the view anglereaches to the lateral channels.

…. konec výňatku.

Metoda integrace (1) přímo v kartézském systému x,y,z může být založena na klasickýchisoparametrických funkcích (viz. např.Zienkiewicz O.C., Taylor R.L.: The Finite Element Method,Butterworth Heinemann, Oxford, 2000. Vol.1, str. 208 a další):

ii Ncc = , ii Nxx = , ii Nyy = , ii Nzz =

Pro speciální případ šestistěnu s osmi vrcholy je osm bázových funkcí vyjádřeno jako trilineárnípolynom v normalizovaných proměnných (-1,1)

)1)(1)(1(81

iiiiN ζζηηξξ +++=

Fig.10 Detected signal and time course of concentration in focus(lf=0.085 m, 2,12 holes r=2.5 mm, 1 hole r=1, 2.5, 7mm, h=30 mm).

Distance from bottom y=400 mm

xc=0.039, yc=0.4, zc=0.098, ϑ=-9000.00

0.01

0.02

0.03

0.04

0.05

0 10 20 30 40 50 60t [s]

12-holes (5mm)1-hole (14mm)1-hole (5mm)2-holes (5mm)1-hole (5mm) T991-hole (1mm) T99C(t) in focus (85mm)

20

Těmto funkcím odpovídá Jakobiho transformační matice

++++++++++++++++++

=

∂∂

∂∂

∂∂

∂∂

∂∂

∂∂

∂∂

∂∂

∂∂

=)1)(1()1)(1()1)(1()1)(1()1)(1()1)(1()1)(1()1)(1()1)(1(

81

iiiiiiiiiiii

iiiiiiiiiiii

iiiiiiiiiiii

ii

ii

ii

ii

ii

ii

ii

ii

ii

zyxzyxzyx

zNyNxN

zNyNxN

zNyNxN

Jηηξξζηηξξζηηξξζζζξξηζζξξηζζξξηζζηηξζζηηξζζηηξ

ζζζ

ηηη

ξξξ

a Jakobián transformace)()()(det 223132211323313321122332332211 JJJJJJJJJJJJJJJJ −+−−−= ,

umožňující vyčíslit objem elementu.Integrály (1) lze aproximovat Gaussovou dvoubodovou integrační formulí

)5773502691.0()5773502691.0(1

1

fffd +−=Ω∫−

Na základě těchto vztahů již lze napsat program pro zpracování CFD dat a výpočet odezevdetektorů:

c

COLIDET1 Time courses CD(t) of collimated detector (CFDdata from neutral files)c automatic processing of max-6 methods.cc reading neutral file (connectivity matrix, and nodalpointsc coordinates) c The same format of neutral files as used in COL-2cc Data in COLIDET.DAT define positioning and characteristic ofcollimatorc parameter (pi=3.141) parameter(nemax=900000,ndmax=1000000,maxhole=100,ntimax=900) character *3 file, filedet*8 dimension ic(nemax,8),xyz(ndmax,3),cxyz(ndmax) dimension x1(maxhole),y1(maxhole),z1(maxhole), / x2(maxhole),y2(maxhole),z2(maxhole), / nv(2),rv(2),hv(maxhole) dimension tt(ntimax),cd(ntimax),itim(ntimax),met(6) dimension cnd(8),xnd(8),ynd(8),znd(8),f(8),fx(8),fy(8),fz(8) real j11,j12,j13,j21,j22,j23,j31,j32,j33 data filedet/'detect01'/write(*,*)' This program calculates time responses of collimated'write(*,*)' detector whose description must be prepared in file CO /LIDET.DAT:'write(*,*)' ACOL - attenuation coef. of collimator'write(*,*)' XC,YC,ZC- center of collimator'write(*,*)' THX,THY - inclination (in degrees, will be converted t /o radians)'write(*,*)' NV(2) - number of holes at outer and inner circle'write(*,*)' RV(2) - radius of circles with holes'write(*,*)' H - thickness of collimator 'write(*,*)' D - diameter of holes'write(*,*)' DET - diameter of detector'write(*,*)' FOC - focus length'write(*,*)' PHI - initial angle of the first hole in collimato /r (in degrees)'write(*,*)' AMEDIA - attenuation of media'write(*,*)' TSTEP - time step, list of steps is in TIMES.DAT'write(*,*)write(*,*)' Results of CFD are in form of neutral files CONNECT, C /OORDS and 1,2,...'write(*,*)' where the numbers used as file-names define correspond /ing time step.'write(*,*)' This version is limited to 1e6 elements and nodes,'write(*,*)' to 900 time steps and maximum 100 detector holes.'write(*,*)' Results (time courses of detector responses) will be i /n the file COLIDET.OUT.' write(*,*)

pause write(*,*) open(1,file='connect') open(2,file='coords') open(4,file=filedet) open(5,file=filedet//'.out') open(6,file='times.dat')c CASOVE KROKY (INTEGER) write(*,*)' Start reading times.dat...' do i=1,ntimax read(6,*,end=1)itim(i) enddo1 ntime=i-1 close(6) write(*,*)' ...end reading times.dat'c DATA in CONNECT write(*,*)' Start reading elements...' do i=1,nemax read(1,*,end=2)k,(ic(i,j),j=1,8) enddo2 ne=i-1 write(*,*)' ...end reading elements connect. NE=',nec DATA in COORDS write(*,*)' Start reading coords...' xsum=0 ysum=0 zsum=0 do i=1,ndmax read(2,*,end=3)k,(xyz(i,j),j=1,3) xsum=xsum+xyz(i,1) ysum=ysum+xyz(i,2) zsum=zsum+xyz(i,3) enddo3 nd=i-1 write(*,*)' ...end reading coords ND=',nd write(*,*)' Xc,Yc,Zc:',xsum/nd,ysum/nd,zsum/nd write(5,*)'Processing detector file[',filedet,']'cc DATA in COLIDET.DAT describes one collimated detector in ageneral positioncc ACOL - attenuation coef. of collimatorc XC,YC,ZC- center of collimatorc THX,THY - inclination (in degrees, will be converted to radians)c NV(2) - number of holes at outer and inner circlec RV(2) - radius of circles with holesc H - thickness of collimator c D - diameter of holesc DET - diameter of detectorc FOC - focus lengthc PHI - initial angle of the first hole in collimator (in degrees)c AW - attenuation of mediac DT - time step

21

c read(4,*)acol,xc,yc,zc,thx,thy,nv,rv,h,d,det,foc,phi,aw,dt thxr=thx*pi/180. thyr=thy*pi/180. phir=phi*pi/180.cc Geometry of holesc callcolgeo(xc,yc,zc,thxr,thyr,nv,rv,foc,h,phir,x1,y1,z1,x2,y2,z2) n=nv(1)+nv(2) xfoc=0 yfoc=0 zfoc=0 do i=1,n hv(i)=sqrt((x1(i)-x2(i))**2+(y1(i)-y2(i))**2+(z1(i)-z2(i))**2) xfoc=xfoc+x1(i)+(x1(i)-x2(i))*foc/hv(i) yfoc=yfoc+y1(i)+(y1(i)-y2(i))*foc/hv(i) zfoc=zfoc+z1(i)+(z1(i)-z2(i))*foc/hv(i) enddo write(*,*)' Xf,Yf,Zf:',xfoc/n,yfoc/n,zfoc/ncc METH - methodc write(*,*)' Number of methods (1-6)' read(*,*)nmeth do i=1,nmeth write(*,*)i,' select method:' read(*,*)met(i) enddocc GAUSS pointc write(*,*)' Number of Gaussian points: 1,8' read(*,*)ngaus if(ngaus.eq.1)then imi=0 ima=0 else imi=-1 ima=1 endifcc Loop metods--------------------c do method=1,nmeth meth=met(method)

write(5,20)AW,ACOL,D,NV,RV,THX,THY,XC,YC,ZC,FOC,PHI,NGAUS,METH20 format(/' Attenuation Awater=',e10.3,' Acollim=',e10.3,'[1/m]'/ / ' Collimator:'/ / ' hole diameter=',f7.4,'[m] ', / ' n1,n2:',2i3,' R1,R2:',2f7.4,'[m] ' / ' Thetax=',f6.4,' Thetay=',f6.4,' [deg]'/ / ' Center xyz:',3f10.6,' [m]'/ / ' Focus length=',f10.6,'[m] ', / ' phi=',f10.6// / ' No.of G-points=',i2,' algorithm ofcollimation=',i2// / ' Time [s] Cdetector [source]') write(*,*)cc Time steps loop -----------------------------c do iti=1,ntime itime=itim(iti) t=(itime-1)*dt write(file,10)itime10 format(i3.3) open(6,file=file) write(*,*)' Start reading [',file,']' cxyz=0 csum=0 do i=1,nd read(6,*,end=11)cxyz(i) cxyz(i)=cxyz(i)/100000. csum=csum+cxyz(i) enddo11 csum=csum/nd write(*,*)' ...end reading ',file,' Cmean',csum tt(iti)=t cd(iti)=0c Element loop (all elements are processed) do ie=1,ne if(mod(ie,10000).eq.0)write(*,12)meth,iti,ie,cd(iti)12 format(' method=',i2,' time=',i3,' element',i7, / ' c_partial_sum=',e10.3) do iu=1,8 ind=ic(ie,iu) xnd(iu)=xyz(ind,1) ynd(iu)=xyz(ind,2) znd(iu)=xyz(ind,3) cnd(iu)=cxyz(ind) enddo do ix=imi,ima,2 rx=0.5773502691*ix do iy=imi,ima,2 ry=0.5773502691*iy do iz=imi,ima,2 rz=0.5773502691*iz call basis(rx,ry,rz,f,fx,fy,fz) j11=0 j12=0 j13=0 j21=0 j22=0

j23=0 j31=0 j32=0 j33=0 x=0 y=0 z=0 c=0 do i=1,8 j11=j11+xnd(i)*fx(i) j12=j12+ynd(i)*fx(i) j13=j13+znd(i)*fx(i) j21=j21+xnd(i)*fy(i) j22=j22+ynd(i)*fy(i) j23=j23+znd(i)*fy(i) j31=j31+xnd(i)*fz(i) j32=j32+ynd(i)*fz(i) j33=j33+znd(i)*fz(i) x=x+xnd(i)*f(i) y=y+ynd(i)*f(i) z=z+znd(i)*f(i) c=c+cnd(i)*f(i) enddo detj=j11*(j22*j33-j32*j23)-j12*(j21*j33-j31*23)+ / j13*(j21*j32-j31*j22) detj=abs(detj)c calculate contribution to n-holes do i=1,n call txyzrz(x1(i),y1(i),z1(i),x2(i),y2(i),z2(i), / x,y,z,rd,zd) res=coluni(meth,zd,rd,d,hv(i),aw,acol,det) if(c.lt.0..or.res.lt.0.)then write(*,*)' c=',c,' colim=',res endif cd(iti)=cd(iti)+c*res*detj enddo enddo enddo enddo enddo close(6) write(5,30)tt(iti),cd(iti)c c Time steps loop ends-------------------------c enddo scd=0 do i=1,ntime scd=scd+(cd(i)+cd(i+1))*(tt(i+1)-tt(i))/2. enddo write(5,31)31 format(/' Normalising data to unit area'// / ' Time [s] Cdetector [norm]') do i=1,ntime if(scd.ne.0.)cd(i)=cd(i)/scd write(5,30)tt(i),cd(i) enddo30 format(3e10.3,f10.7)cc Loop metods ends-----------------c enddo end

subroutine basis(rx,ry,rz,f,fx,fy,fz)cc Trilinear basis functions and their derivativesc dimension f(8),fx(8),fy(8),fz(8),vx(8),vy(8),vz(8) data vx,vy,vz/1,-1,-1,1,1,-1,-1,1,1,1,-1,-1,1,1,-1,-1, / -1,-1,-1,-1,1,1,1,1/ do i=1,8 f(i)=(1+rx*vx(i))*(1+ry*vy(i))*(1+rz*vz(i))/8. fx(i)=vx(i)*(1+ry*vy(i))*(1+rz*vz(i))/8. fy(i)=(1+rx*vx(i))*vy(i)*(1+rz*vz(i))/8. fz(i)=(1+rx*vx(i))*(1+ry*vy(i))*vz(i)/8. enddo end

subroutine txyzrz(x1,y1,z1,x2,y2,z2,x,y,z,rd,zd)cc 1 - celo valcoveho otvoru (souradnice cela kolimatoru)c 2 - libovolny bod za kolimacnim otvoremc x,y,z - bod v nemz je umisten zaric s jednotkovou aktivitouc rd - vypoctena vzdalenost od osy otvoru kolimatoruc zd - vypoctena vzdalenost od roviny celac tk=((x-x1)*(x2-x1)+(y-y1)*(y2-y1)+(z-z1)*(z2-z1))/ / ((x2-x1)**2+(y2-y1)**2+(z2-z1)**2) xk=(x2-x1)*tk+x1 yk=(y2-y1)*tk+y1 zk=(z2-z1)*tk+z1 rd=sqrt((xk-x)**2+(yk-y)**2+(zk-z)**2) zd=sqrt((xk-x1)**2+(yk-y1)**2+(zk-z1)**2) end

subroutine colgeo(xc,yc,zc,thx,thy,nv,rv,f,h,dphi, / x1,y1,z1,x2,y2,z2)cc Vypocet souradnic dvojic bodu, definujicich valcove otvory vkolimatoru.c Poloha kolimatoru je definovana stredem xc,yc,zc a dvema uhlynatocenic thx a thy vuci souradnym osam X a Y. Otvory mohou byt az na dvousoustrednychc kruznicich o polomerech Rvi a jsou kolimovany do ohniska na osekolimatoru.

22

cc xc,yc,zc,thx,thy - stred cela kolimatoru a orientace jehorovinyc nv(2) - pocty otvoruc Rv(2) - polomeryc f - vzdalenost ohniska od cela kolimatoruc h - tloustka kolimacni deskyc dphi - uhel pootoceni prvniho otvoru mezi dvema radamic Vystupni parametry:c x1,..x2,.. - souradnice cela a konce otvoruc dimension x1(*),y1(*),z1(*),x2(*),y2(*),z2(*),nv(2),rv(2) ctx=cos(thx) cty=cos(thy) stx=sin(thx) sty=sin(thy) xf=xc+f*ctx*sty yf=yc-f*stx zf=zc+f*ctx*cty m=0 do ir=1,2 n=nv(ir) r=rv(ir) if(n.gt.0)df=2*3.141/n fi=(ir-1)*dphi do i=1,n m=m+1 sfi=sin(fi) cfi=cos(fi) x1(m)=xc+r*(cfi*stx*sty-sfi*cty) y1(m)=yc+r*ctx*cfi z1(m)=zc+r*(cfi*stx*cty+sfi*sty) x2(m)=xf+(x1(m)-xf)*(1+h/f) y2(m)=yf+(y1(m)-yf)*(1+h/f) z2(m)=zf+(z1(m)-zf)*(1+h/f) fi=fi+df enddo enddo end

function coluni(method,zs,rsgn,d,hs,amu,acol,det)c c Vypocet odezvy detektoru na zareni prochazejici valcovym otvoremc z bodoveho zarice s jednotkovou aktivitou (vzdaleneho o |rsgn|od osyc valce, a o vzdalenost ZS od cela kolimatoru).cc METH=1 - view factor (bez korekce na blizkou vzdalenost)c METH=2 - view factor (s korekci)c METH=3 - 1R (bez korekce)c METH=4 - 1R (s korekci na blizkost)c METH=5 - 3R detektor o vetsim prumeru nez je prumer diry (bezkorekce)c METH=6 - 3R detektor o vetsim prumeru nez je prumer diry skorekcicc ZS,RSGN - poloha bodoveho zdroje s jednotkovou aktivitoucc D - prumer otvoruc HS - delka valcoveho otvoruc AMU - soucinitel utlumu prostredic ACOL- soucinitel utlumu materialu kolimatoruc det - prumer detektoruc parameter (pi=3.141) real l,lh,lh2,l1,l2,lm1,lm2,lc1,lc2 r=abs(rsgn) z=amax1(zs,1e-7) h=amax1(hs,1e-6) select case(method) case(1)cc View factor bez korekcec r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2 e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0 elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*asn(ber1)+r22*asn(ber2)-b else b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asn(ber1))+r22*asn(ber2)-b endif coluni=s*zh*exp(-amu*l)/(4*pi*lh**3) case(2)cc View factor s korekci na blizkou vzdalenostc r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2

e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0 elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*asn(ber1)+r22*asn(ber2)-b else b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asn(ber1))+r22*asn(ber2)-b endif coluni=s*zh*exp(-amu*l)/(2*pi*r12)*(1./lh-1./sqrt(lh2+r12)) case(3)cc 1R bez korekcec r1=d/2 zh=z+h lh=sqrt(zh**2+r**2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/(4*pi*lh**3) case(4)cc 1R s korekcic r1=d/2 r12=r1*r1 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12)) case(5)cc 3R s rozdilnym prumerem detektoru bez korekcec r1=d/2 r12=r1**2 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/(4*pi*lh**3) br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh) if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) col=ds*zh/(4*pi)*(exp(-amu*lm1-acol*lc1)/l1**3+ / exp(-amu*lm2-acol*lc2)/l2**3) coluni=coluni+col case(6)cc 3R s rozdilnym prumerem detektoru s korekcic r1=d/2 r12=r1**2 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12)) br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh)

23

if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) col=ds*zh/(4*pi)*(exp(-amu*lm1-acol*lc1)/l1**3+ / exp(-amu*lm2-acol*lc2)/l2**3) coluni=coluni+col end select end

real function asn(x) if(x.ge.0..and.x.le.1.)then asn=asin(x) elseif(x.ge.-1..and.x.lt.0.)then asn=-asin(-x) else asn=0 endif end

24

COLIPT Time courses CD(t) of collimated detector (CFDdata from neutral files)cc reading neutral file (connectivity matrix, and nodalpointsc coordinates) c The same format of neutral files as used in COL-2cc Data in COLIDET.DAT define point responsesc c @Zitny March 2002c parameter (pi=3.141,ndet=3) parameter(nemax=900000,ndmax=1000000,maxpoint=1000,ntimax=900) common/detec/dxyz(maxpoint,3),dcount(maxpoint,ndet),mp,near,e character *3 file dimension ic(nemax,8),xyz(ndmax,3),cxyz(ndmax) dimension tt(ntimax),cd(ntimax,4),itim(ntimax),scd(4),res(4) dimension cnd(8),xnd(8),ynd(8),znd(8),f(8),fx(8),fy(8),fz(8) real j11,j12,j13,j21,j22,j23,j31,j32,j33write(*,*)' This program calculates time responses of collimated'write(*,*)' detector using point source responses in COLIPT.DAT'write(*,*)write(*,*)' Results of CFD are in form of neutral files CONNECT, C /OORDS and 1,2,...'write(*,*)' where the numbers used as file-names define correspond /ing time step.'write(*,*)' This version is limited to 1e6 elements and nodes,'write(*,*)' to 900 time steps and maximum 100 detector holes.'write(*,*)' Results (time courses of detector responses) will be i /n the file COLIDET.OUT.' write(*,*) pause write(*,*) open(1,file='connect') open(2,file='coords') open(4,file='colipt.dat') open(5,file='colipt.out') open(6,file='times.dat')c read point sources read(4,*)e,near mp=150 read(4,*,end=51)(dxyz(mp,j),j=1,3),(dcount(mp,j),j=1,ndet) mp=mp+1 goto 5051 mp=mp-1 write(*,*)mp,'-point sources positions' dt=0.25c CASOVE KROKY (INTEGER) write(*,*)' Start reading times.dat...' do i=1,ntimax read(6,*,end=1)itim(i) enddo1 ntime=i-1 close(6) write(*,*)' ...end reading times.dat'c DATA in CONNECT write(*,*)' Start reading elements...' do i=1,nemax read(1,*,end=2)k,(ic(i,j),j=1,8) enddo2 ne=i-1 write(*,*)' ...end reading elements connect. NE=',nec DATA in COORDS write(*,*)' Start reading coords...' xsum=0 ysum=0 zsum=0 do i=1,ndmax read(2,*,end=3)k,(xyz(i,j),j=1,3) xsum=xsum+xyz(i,1) ysum=ysum+xyz(i,2) zsum=zsum+xyz(i,3) enddo3 nd=i-1 write(*,*)' ...end reading coords ND=',nd write(*,*)' Xc,Yc,Zc:',xsum/nd,ysum/nd,zsum/ndcc DATA in COLIDET.DAT describes one collimated detector in ageneral positionc write(5,20)20 format(/ / ' Time [s] Cdetector [source]') write(*,*) ngaus=1 if(ngaus.eq.1)then imi=0 ima=0 else imi=-1 ima=1 endifcc Time steps loopc do iti=1,ntime itime=itim(iti) t=(itime-1)*dt write(file,10)itime10 format(i3.3) open(6,file=file)

write(*,*)' Start reading [',file,']' cxyz=0 csum=0 do i=1,nd read(6,*,end=11)cxyz(i) cxyz(i)=cxyz(i)/100000. csum=csum+cxyz(i) enddo11 csum=csum/nd write(*,*)' ...end reading ',file,' Cmean',csum tt(iti)=t do k=1,ndet cd(iti,k)=0 enddoc Element loop (all elements are processed) do ie=1,ne if(mod(ie,10000).eq.0)write(*,12)ie,cd(iti,1)12 format(' element',i7,' c_partial_sum=',e10.3) do iu=1,8 ind=ic(ie,iu) xnd(iu)=xyz(ind,1) ynd(iu)=xyz(ind,2) znd(iu)=xyz(ind,3) cnd(iu)=cxyz(ind) enddo do ix=imi,ima,2 rx=0.5773502691*ix do iy=imi,ima,2 ry=0.5773502691*iy do iz=imi,ima,2 rz=0.5773502691*iz call basis(rx,ry,rz,f,fx,fy,fz) j11=0 j12=0 j13=0 j21=0 j22=0 j23=0 j31=0 j32=0 j33=0 x=0 y=0 z=0 c=0 do i=1,8 j11=j11+xnd(i)*fx(i) j12=j12+ynd(i)*fx(i) j13=j13+znd(i)*fx(i) j21=j21+xnd(i)*fy(i) j22=j22+ynd(i)*fy(i) j23=j23+znd(i)*fy(i) j31=j31+xnd(i)*fz(i) j32=j32+ynd(i)*fz(i) j33=j33+znd(i)*fz(i) x=x+xnd(i)*f(i) y=y+ynd(i)*f(i) z=z+znd(i)*f(i) c=c+cnd(i)*f(i) enddo detj=j11*(j22*j33-j32*j23)-j12*(j21*j33-j31*23)+ / j13*(j21*j32-j31*j22) detj=abs(detj)c calculate response in point x,y,z call interp(x,y,z,res) do k=1,ndet cd(iti,k)=cd(iti,k)+c*res(k)*detj enddo enddo enddo enddo enddo close(6) write(5,30)tt(iti),(cd(iti,k),k=1,ndet) enddo scd=0 do i=1,ntime do k=1,ndet scd(k)=scd(k)+(cd(i,k)+cd(i+1,k))*(tt(i+1)-tt(i))/2. enddo enddo write(5,31)31 format(/' Normalised data to unit area'// / ' Time [s] Cdetector [norm]') do i=1,ntime do k=1,ndet if(scd(k).gt.0.)cd(i,k)=cd(i,k)/scd(k) enddo write(5,30)tt(i),(cd(i,k),k=1,ndet) enddo30 format(3e10.3,5x,4e10.3) end

subroutine basis(rx,ry,rz,f,fx,fy,fz)cc Trilinear basis functions and their derivativesc dimension f(8),fx(8),fy(8),fz(8),vx(8),vy(8),vz(8) data vx,vy,vz/1,-1,-1,1,1,-1,-1,1,1,1,-1,-1,1,1,-1,-1, / -1,-1,-1,-1,1,1,1,1/ do i=1,8 f(i)=(1+rx*vx(i))*(1+ry*vy(i))*(1+rz*vz(i))/8. fx(i)=vx(i)*(1+ry*vy(i))*(1+rz*vz(i))/8. fy(i)=(1+rx*vx(i))*vy(i)*(1+rz*vz(i))/8. fz(i)=(1+rx*vx(i))*(1+ry*vy(i))*vz(i)/8. enddo end

25

subroutine interp(x,y,z,dv) parameter (maxpoint=1000,ndet=3) common/detec/dxyz(maxpoint,3),dcount(maxpoint,ndet),mp,near,e dimension d2(maxpoint),dv(ndet)cc Interpolationc dv=0 sumd=0 do i=1,mp d2(i)=(x-dxyz(i,1))**2+(y-dxyz(i,2))**2+(z-dxyz(i,3))**2 enddo do j=1,near

v=1e10do i=1,mp if(d2(i).lt.v)then

imin=i v=d2(i) endif enddo

d=amax1(d2(imin)**e,1e-10) do k=1,ndet dv(k)=dv(k)+dcount(imin,k)/d enddo

sumd=sumd+1./d d2(imin)=1e10 enddo dv=dv/sumd end

point source

0.00E+00

1.00E-02

2.00E-02

3.00E-02

4.00E-02

5.00E-02

6.00E-02

0.00E+00 5.00E+00 1.00E+01 1.50E+01 2.00E+01 2.50E+01 3.00E+01 3.50E+01 4.00E+01 4.50E+01 5.00E+01

d2d3d4

26

c

INTOP INTerpolation OPtimisation c Test of interpolation formula,when only closed radiating pointsare used c for evaluationc @Zitny March 2002c use msflib parameter (mmax=1000,pi=3.141,maxh=200) integer near common /mdata/dxyz(mmax,3),dcount(mmax),mp,e,near common /detect/d,acol,aw,nholes, /x1(maxh),y1(maxh),z1(maxh),x2(maxh),y2(maxh),z2(maxh),hv(maxh) dimension nv(2),rv(2),dvg(maxh*maxh),dig(maxh*maxh) character *28 label call wfull ii=setbkcolor(15) ii=settextcolor(int2(0)) call clearscreen($gclearscreen) call wopen(30,'CONSOLE',40,120,70,0,480,160) ii=setbkcolor(3) call clearscreen($gclearscreen) open(1,file='intop.dat') open(3,file='intop.out') open(9,file='intop.dbg') mp=11 read(1,*,end=2)(dxyz(mp,j),j=1,3) mp=mp+1 goto 12 mp=mp-1 write(*,*)mp,'-point sources position' open(2,file='detektor.dat') read(2,*)xmi,xma,nx read(2,*)ymi,yma,ny read(2,*)zmi,zma,nz read(2,*) acol,xc,yc,zc,thx,thy,nv,rv,h,d,det,foc,phi write(*,'(/'' Attenuation of collim.='',f6.1/)')acol write(*,'('' Xc,Yc,Zc:'',3f10.3)')xc,yc,zc write(*,'('' Angles Tx,Ty:'',2f7.1/)')thx,thy write(*,'('' Colim N:'',2i4,'' R:'',2f8.4)')nv,rv write(*,'('' Colim H='',f6.4,'' D='',f6.4,'' Det='',f6.4)') / h,d,det write(*,'('' Colim f='',f6.4,'' p='',f6.0)')foc,phi write(30,*)' Attenuation of media:' read(30,*)aw write(30,*)' Algorithm of collimation [1-6]:' read(30,*)ifu thxr=thx*pi/180. thyr=thy*pi/180. phir=phi*pi/180. callcolgeo(xc,yc,zc,thxr,thyr,nv,rv,foc,h,phir,x1,y1,z1,x2,y2,z2) nholes=nv(1)+nv(2) do i=1,nholes hv(i)=sqrt((x1(i)-x2(i))**2+(y1(i)-y2(i))**2+(z1(i)-z2(i))**2) enddo do i=1,mp call func(ifu,dxyz(i,1),dxyz(i,2),dxyz(i,3),dcount(i)) write(3,30)(dxyz(i,j),j=1,3),dcount(i)30 format(3f10.3,e12.3) enddo dhy=(yma-ymi)/ny dhx=(xma-xmi)/nx dhz=(zma-zmi)/nz write(30,*)' Number of nearest points:' read(30,*)near write(30,*)' Exponent e:' read(30,*)e write(30,*)' Error evaluation-1, Contours-2' read(30,*)icont select case(icont) case(1)c Evaluate error dm=0. idm=0

vmax=0 do iz=1,nz z=zmi+dhz*(iz-1) write(30,*)'z=',z do iy=1,ny y=ymi+dhy*(iy-1) do ix=1,nx x=xmi+dhx*(ix-1) call func(ifu,x,y,z,dv) call interp(x,y,z,di)

vmax=amax1(vmax,abs(dv)) if(dv.ne.0.)then dm=dm+abs(dv-di) idm=idm+1 endif enddo enddo enddo if(idm.gt.0)then write(30,150)dm/(idm*vmax)*100150 format('Relative error=',f10.2,'%') else write(30,*)'all zeroes' endif case(2)c Contours in a z-plane call wopen(10,'colimator',50,68,0,12,480,480) callgmfstw(1,0,10,3,18,'X','Y',0.,1.,0.,1.,xmi,xma,ymi,yma)

call wopen(20,'interpolation',50,68,70,12,480,480) callgmfstw(2,0,20,3,18,'X','Y',0.,1.,0.,1.,xmi,xma,ymi,yma) write(30,*)' specify z for countours' read(30,*)z vmax=-1e10 vmin=1e10 do while(near.gt.2) do iy=1,ny y=ymi+dhy*(iy-1) do ix=1,nx x=xmi+dhx*(ix-1) call func(ifu,x,y,z,vdet) call interp(x,y,z, vint) write(9,199)x,y,z,vdet,vint199 format(' x,y,z',3f6.3,' vdet=',e10.3,'vint=',e10.3) dvg((iy-1)*nx+ix)=vdet dig((iy-1)*nx+ix)=vint vmax=amax1(amax1(vmax,vdet),vint) vmin=amin1(amin1(vmin,vdet),vint) enddo enddo write(label,50)z,near,e50 format(' Z=',e10.3,' Near=',i2,' e=',f4.2) callgmfrctr(1,label,28,dvg,nx,ny,xmi,xma,ymi,yma,vmin,vmax, / 50,2200,0) callgmfrctr(2,label,28,dig,nx,ny,xmi,xma,ymi,yma,vmin,vmax, / 50,2200,0) write(30,*)' specify Near-points' read(30,*)near if(near.gt.2)then write(30,*)' specify exponent' read(30,*)e write(30,*)' specify z for countours' read(30,*)z endif enddo end select end

subroutine func(ifu,x,y,z,c) parameter (mmax=1000,pi=3.141,maxh=200) common /detect/d,acol,aw,nholes, /x1(maxh),y1(maxh),z1(maxh),x2(maxh),y2(maxh),z2(maxh),hv(maxh) c=0 do i=1,nholes calltxyzrz(x1(i),y1(i),z1(i),x2(i),y2(i),z2(i),x,y,z,rd,zd) c=c+coluni(ifu,zd,rd,d,hv(i),aw,acol,det) enddo end

subroutine interp(x,y,z,dv) parameter (mmax=1000,pi=3.141,maxh=200) common /mdata/dxyz(mmax,3),dcount(mmax),mp,e,n dimension d2(mmax) cc Interpolationc dv=0 sumd=0 do i=1,mp d2(i)=(x-dxyz(i,1))**2+(y-dxyz(i,2))**2+(z-dxyz(i,3))**2 enddo do j=1,N

v=1e10do i=1,mp if(d2(i).lt.v)then

imin=i v=d2(i) endif enddoc call gmfmrk(dxyz(imin,1),dxyz(imin,2),40)

d=amax1(d2(imin)**e,1e-10)dv=dv+dcount(imin)/dsumd=sumd+1./d

d2(imin)=1e10 enddo dv=dv/sumd end

subroutine txyzrz(x1,y1,z1,x2,y2,z2,x,y,z,rd,zd)cc 1 - celo valcoveho otvoru (souradnice cela kolimatoru)c 2 - libovolny bod za kolimacnim otvoremc x,y,z - bod v nemz je umisten zaric s jednotkovou aktivitouc rd - vypoctena vzdalenost od osy otvoru kolimatoruc zd - vypoctena vzdalenost od roviny celac tk=((x-x1)*(x2-x1)+(y-y1)*(y2-y1)+(z-z1)*(z2-z1))/ / ((x2-x1)**2+(y2-y1)**2+(z2-z1)**2) xk=(x2-x1)*tk+x1 yk=(y2-y1)*tk+y1 zk=(z2-z1)*tk+z1 rd=sqrt((xk-x)**2+(yk-y)**2+(zk-z)**2) zd=sqrt((xk-x1)**2+(yk-y1)**2+(zk-z1)**2) end

subroutine colgeo(xc,yc,zc,thx,thy,nv,rv,f,h,dphi, / x1,y1,z1,x2,y2,z2)cc Vypocet souradnic dvojic bodu, definujicich valcove otvory vkolimatoru.

27

c Poloha kolimatoru je definovana stredem xc,yc,zc a dvema uhlynatocenic thx a thy vuci souradnym osam X a Y. Otvory mohou byt az na dvousoustrednychc kruznicich o polomerech Rvi a jsou kolimovany do ohniska na osekolimatoru.cc xc,yc,zc,thx,thy - stred cela kolimatoru a orientace jehorovinyc nv(2) - pocty otvoruc Rv(2) - polomeryc f - vzdalenost ohniska od cela kolimatoruc h - tloustka kolimacni deskyc dphi - uhel pootoceni prvniho otvoru mezi dvema radamic Vystupni parametry:c x1,..x2,.. - souradnice cela a konce otvoruc dimension x1(*),y1(*),z1(*),x2(*),y2(*),z2(*),nv(2),rv(2) ctx=cos(thx) cty=cos(thy) stx=sin(thx) sty=sin(thy) xf=xc+f*ctx*sty yf=yc-f*stx zf=zc+f*ctx*cty m=0 do ir=1,2 n=nv(ir) r=rv(ir) if(n.gt.0)df=2*3.141/n fi=(ir-1)*dphi do i=1,n m=m+1 sfi=sin(fi) cfi=cos(fi) x1(m)=xc+r*(cfi*stx*sty-sfi*cty) y1(m)=yc+r*ctx*cfi z1(m)=zc+r*(cfi*stx*cty+sfi*sty) x2(m)=xf+(x1(m)-xf)*(1+h/f) y2(m)=yf+(y1(m)-yf)*(1+h/f) z2(m)=zf+(z1(m)-zf)*(1+h/f) fi=fi+df enddo enddo end

function coluni(method,zs,rsgn,d,hs,amu,acol,det)c c Vypocet odezvy detektoru na zareni prochazejici valcovym otvoremc z bodoveho zarice s jednotkovou aktivitou (vzdaleneho o |rsgn|od osyc valce, a o vzdalenost ZS od cela kolimatoru).cc METH=1 - view factor (bez korekce na blizkou vzdalenost)c METH=2 - view factor (s korekci)c METH=3 - 1R (bez korekce)c METH=4 - 1R (s korekci na blizkost)c METH=5 - 3R detektor o vetsim prumeru nez je prumer diry (bezkorekce)c METH=6 - 3R detektor o vetsim prumeru nez je prumer diry skorekcicc ZS,RSGN - poloha bodoveho zdroje s jednotkovou aktivitoucc D - prumer otvoruc HS - delka valcoveho otvoruc AMU - soucinitel utlumu prostredic ACOL- soucinitel utlumu materialu kolimatoruc det - prumer detektoruc parameter (pi=3.141) real l,lh,lh2,l1,l2,lm1,lm2,lc1,lc2 r=abs(rsgn) z=amax1(zs,1e-6) h=amax1(hs,1e-4) select case(method) case(1)cc View factor bez korekcec r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2 e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0

elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*asin(ber1)+r22*asin(ber2)-b else b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asin(ber1))+r22*asin(ber2)-b

endif coluni=s*zh*exp(-amu*l)/(4*pi*lh**3) case(2)c

c View factor s korekci na blizkou vzdalenostc r1=d/2 r2=r1*(h+z)/z r12=r1*r1 r22=r2*r2 e=h*r/z l=sqrt(z**2+r**2) zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) if(e.ge.r1+r2)then s=0 elseif(e.le.r2-r1)then s=pi*r12 elseif(e.ge.sqrt(r22-r12))then b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*asin(ber1)+r22*asin(ber2)-b else b=sqrt(amax1(0.,4*r12*r22-(e**2-r12-r22)**2))/2 ber1=b/(e*r1) ber2=b/(e*r2) s=r12*(pi-asin(ber1))+r22*asin(ber2)-b endif coluni=s*zh*exp(-amu*l)/(2*pi*r12)*(1./lh-1./sqrt(lh2+r12)) case(3)cc 1R bez korekcec r1=d/2 zh=z+h lh=sqrt(zh**2+r**2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/(4*pi*lh**3) case(4)cc 1R s korekcic r1=d/2 r12=r1*r1 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12)) case(5)cc 3R s rozdilnym prumerem detektoru bez korekcec r1=d/2 r12=r1*r1 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/(4*pi*lh**3) br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh) if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) if(l1.gt.1e-6.and.l2.gt.1e-6)then col=ds*zh/(4*pi)*(exp(-amu*lm1-acol*lc1)/l1**3+ / exp(-amu*lm2-acol*lc2)/l2**3) else col=0 endif coluni=coluni+col case(6)cc 3R s rozdilnym prumerem detektoru s korekcic r1=d/2 r12=r1**2 zh=z+h lh2=zh**2+r**2 lh=sqrt(lh2) rlm=sqrt((r-r*h/zh)**2+(h-zh)**2) if(r/zh.le.r1/h)then rlc=0 else

28

rlc=sqrt((r1-r*h/zh)**2+(h-zh*r1/r)**2) endif coluni=zh*exp(-amu*rlm-acol*rlc)/2* / (1./lh-1./sqrt(lh2+r12)) br=(det+d)/4 ds=pi*(det**2-d**2)/8 l1=sqrt((br-r)**2+zh**2) l2=sqrt((br+r)**2+zh**2) lm1=l1*(1-h/zh) lm2=l2*(1-h/zh) if(r.lt.br)then lc1=l1*amin1(h/zh,(br-d/2)/(br-r)) else lc1=l1*h/zh endif lc2=l2*amin1(h/zh,(br-d/2)/(br+r)) rl13=l1**3 rl23=l2**3 if(rl13.gt.1e-10.and.rl23.gt.1e-10)then col=ds*zh/(4*pi)*(exp(-amu*lm1-acol*lc1)/rl13+ / exp(-amu*lm2-acol*lc2)/rl23) else col=0 endif coluni=coluni+col end select end