/[PAMELA software]/gpamela/garfield/src/heed101garf.car
ViewVC logotype

Contents of /gpamela/garfield/src/heed101garf.car

Parent Directory Parent Directory | Revision Log Revision Log


Revision 3.1.1.1 - (show annotations) (download) (vendor branch)
Thu Jul 11 16:02:05 2002 UTC (22 years, 7 months ago) by cafagna
Branch: v3r0, MAIN
CVS Tags: v4r4, v4r5, v4r6, v4r7, v4r0, v4r1, v4r2, v4r3, v4r8, v4r9, firstrelease, v4r14, v4r12, v4r13, v4r10, v4r11, v3r3, v3r1, v3r2, HEAD
Changes since 3.1: +0 -0 lines
First GPAMELA release on CVS

1 +TITLE.
2 HEED 1.01 /00 960118 00.00
3 *
4 * HEED, written by Igor Smirnov (St Petersburg) with an
5 * interface for use with Garfield.
6 *
7 +PATCH,*HEEDGARF. Pilot patch
8 +USE,HEEDCOM.
9 +USE,HEEDINT.
10 +USE,HEEDSUB.
11 +USE,EHEED.
12 +PATCH,DOC,IF=DOC.
13 +DECK,DOC,IF=DOC.
14
15
16
17 --------------------------------------------------
18 HEED, an ionization loss simulation program
19 User's guide
20 Version 1.01 (preliminary)
21 --------------------------------------------------
22
23 Igor Smirnov
24
25 06.02.97
26
27
28 Introduction
29 ------------
30
31
32 The program HEED is intended for detailed calculations of the
33 ionization energy loss of fast charged particles in gases. The program
34 works for solids also, but with less accuracy.
35 The program can also simulate the absorption of the photons in the
36 detector.
37 The program can be applied to simulations of the detectors of the
38 high energy charged particles which register ionization produced by
39 particles in the gases.
40 The algorithm is based on a Monte-Carlo simulation of the energy
41 transfers from the incident particle to atomic electrons. After knocking
42 out of a primary delta-electron a vacancy remains in the atomic shell. The
43 number of shell with vacancy and the type of atom in the gas mixture are
44 specified for every energy transfer. It allows to calculate the
45 delta-electron energy and generate a cascade of secondary particles
46 emitted by the excited atom (the Auger electrons and the fluorescence
47 photons). The calculations include simulation of both absorption of them
48 in the matter and creation of conduction electrons.
49
50 The program is written in fortran-77. It is tested on several UNIX
51 platforms.
52
53 The program can be run as a stand-alone program and as subroutines
54 There are two variants: subroutine calculating an average ionization
55 and a cluster-sizes distribution and subroutine for generation of the
56 track, i.e. electron positions. In the both subroutine-forms the program
57 is restricted in choice of geometry and others. Interface to the subroutines
58 is much simpler, therefore we begin from explanation of how to call them, all
59 the following text being almost unnecessary for that users who exploit only
60 the subroutines. The user's guide followes by two additional chapters
61 expounding how to build the executable program from CMZ source text,
62 and giving a test results.
63
64 --------------------------------------------------------
65 Copyright notice
66 ----------------
67
68 Copyright Igor Smirnov, 1995, all rights reserved.
69
70 HEED, an ionization loss simulation program.
71
72 Copyright and any other appropriate legal protection of this computer
73 program and associated documentation reserved in all countries of the
74 world.
75
76 This program or documentation may not be reproduced and/or redistributed
77 by any method without prior written consent of the author.
78
79 Permission for the scientific usage of the program described herein is
80 granted apriori to all institution of Russian Academy of Scienses and to
81 those scientific institutes associated with the CERN experimental program
82 or with whom CERN has concluded a scientific collaboration agreement.
83
84 Commercial utilisation requires explicit a priory permission from the author
85 and will be subjected to payment of a license fee.
86
87
88 ------------------------------------------------------
89
90 The author can not warrant correct functioning of any part of the
91 program, it is the duty of the user to check that the accuracy of the
92 results is adequate for his/her purposes.
93 Any messages about errors, inaccuracies, and any other problems
94 are welcome. Suggestions for improvement are welcome.
95 Author are looking for any data on photoabsorption cross section,
96 especially for molecules and will be appreciate for sending him any such
97 data or references to them.
98 Author greatly appreciate receiving a copy of any note or
99 publication for which this program has been used.
100
101 Author's e-mails:
102
103 Igor.Smirnov@cern.ch
104 ismirnov@hep486.pnpi.spb.ru
105
106 Igor Smirnov,
107 High Energy Physics Division,
108 Petersburg Nuclear Physics Institute.
109 Gatchina, 188350
110 St.-Petersburg
111 Russia
112
113
114
115 --------------------------------------------------------
116
117 Installation and compilation of CMZ-version
118 -------------------------------------------
119
120 For CMZ the HEED program is placed into a car-file,
121 a CMZ Ascii Readable file. For installation we recommend the following
122 sequence of steps. First run the CMZ. Then type the next commands:
123 create heed
124 import/arc heed.car
125 seq -O //heed/PROGRAM
126
127 There are seven possible ways of using the program HEED.
128 1. Run it as a stand-alone program with users
129 subroutines IniHeed, UBegEvent, UEndEvent.
130 2. Run the example of stand-alone program HEED.
131 3. Calling the subroutine SHEED.
132 4. Run the program PSHEED which is designed as an example of call of SHEED
133 and serves for testing of SHEED.
134 5. Calling the HEED from another user's program. The HEED is called as
135 subroutines
136 6. Run the program PEHEED which is designed as an example of call of HEED
137 in the form of subroutines and serves for testing of HEED.
138 7. Somebody can want to extract text documentation.
139 To ensure this possibilities some of the decks were equipped with
140 select control options, which allow to extract, compile and link only that
141 decks which is relevant for given task without explicit enumerating of
142 their names. The next options have to be swiched on for each mentioned
143 above case:
144 1. E
145 2. E,E1
146 3. SHEED
147 4. PSHEED, SHEED
148 5. EHEED
149 6. PEHEED, EHEED
150 7. DOC
151 This can be done by the command
152 select option_name
153
154 The compilation is executed by commands
155 cc *
156 ,after that all the necessary object files are in a temporary file,
157 and the link can be executed by usual command depening on operating system.
158 For example, on our computer IBM RISC with operating system AIX
159 the temporary files is cmfor.f and cmfor.o, the program is linked by command
160 xlf -O -g -C -o HEED.e cmfor.o -L$CRNLIB -lpacklib -lkernlib
161 where the environment variable CRNLIB points to libraries.
162
163
164
165
166 Test results: average ionization loss
167 -------------------------------------
168
169 Although the calculation of mean ionization loss (KeV and number
170 of pairs) and number of clusters does not involve all the routines of this
171 package, it uses a range of very important routines, results are numbers
172 and all these numbers can be compared with another calculation and
173 experimental values. This allows partially to check the program both from
174 principal and from technical point of view.
175 Below are the table listing for all predefined gases another
176 calculation by simular model [U.A.Budagov et al. Ionization effects in
177 high energy physics, Energoatomizdat, Moscow, 1988, Russian.](the first
178 line in each item), some experimental data (the second line in each item),
179 and our results (the third line in each item) calculated by subroutine
180 SHEED. The table illustrates the extent of exactness of the program and
181 can serve as a pattern of its results when testing proper execution of the
182 program on another computer.
183
184 ------------------------------------------
185 Molecule dE/dx Npairs Nclusters
186 (KeV)
187 ------------------------------------------
188 He 0.322 7.6 3.3 calc. of U.A.Budagov et al
189 - - 3.57 - 5.02 experimental data
190 0.2847 6.943 3.38 our calculation
191
192 Ne 1.452 39.9 10.9 so on
193 - - 11.7 - 12.4
194 1.446 40.84 11.7
195
196 Ar 2.541 96.6 24.8
197 - - 22 - 28
198 2.517 96.81 26.1
199
200 Kr 4.750 197.5 33.0
201 - - 34.65
202 4.611 192.1 24.5
203
204 Xe 6.862 313.3 44.8
205 - - 48.41
206 6.947 315.8 52.3
207
208 H2 0.342 9.4 4.7
209 - - 4.7
210 0.3362 9.087 7.85
211
212 N2 2.097 60.5 20.8
213 - - -
214 2.004 57.25 27.4
215
216 O2 2.360 76.5 23.2
217 - - -
218 2.285 73.7 24.3
219
220 NH3 1.586 59.8 -
221 - - -
222 1.518 57.08 30.1
223
224 N2O 3.275 100.6 -
225 - - -
226 3.146 96.5 39.8
227
228 CO2 3.280 100.0 33.6
229 - - 33
230 3.133 94.95 34.7
231
232 CF4 - - -
233 - - 51
234 6.049 176.4 59.7
235
236 CH4 1.608 59.3 24.8
237 - - 25 - 26
238 1.537 56.3 31.6
239
240 C2H2 2.339 90.8 31.5
241 - - -
242 2.046 79.3 33
243
244 C2H4 2.696 104.5 40.4
245 - - -
246 2.388 92.58 42.9
247
248 C2H6 2.870 117.7 40.5
249 - - 41 - 51
250 2.731 109.2 53
251
252 C3H8 4.138 176.5 67.6
253 - - 63 - 74
254 3.925 163.5 75
255
256 i-C4H10 5.402 232.8 83.6
257 - - 84 - 93
258 5.119 218.8 96
259 ----------------------------------------
260
261
262 The subroutine SHEED
263 --------------------
264
265 The subroutine SHEED is created on the base of the program HEED
266 for solution of one particular but very important task: calculation of
267 cluster size distribution, and so as to do it in the form of a subroutine
268 calling from another program and receiving all the entering data in the
269 form of subroutine parameters.
270 Therefore the main program MainHEED, and the subroutine IniHeed was
271 converted into the subroutine SHEED. There is no need for user to provide
272 any additional subroutines as it must be done in the case of standart
273 applications of program HEED.
274 The form of calling is:
275 call SHEED
276 + (qmol, nmol, wmol, pres, temp,
277 + tkener, mas, maxnum, soo, oo, debug,
278 + density,dedx, ntotal, nclust, clprob, ierror)
279
280 Input parameters:
281 integer qmol ! Quantity of different molecules
282 ! in the gas mixture.
283 integer nmol(pqMol) ! Their numbers from molecules.inc.
284 ! Use only the named constants
285 ! for compartibility with future versions.
286 real wmol(pqMol) ! Their weights
287 ! (relative quantities of molecules).
288 real pres ! Pressure in Torr.
289 real temp ! Temperature in K.
290 real tkener ! Kinetic energy of incident particle (MeV)
291 real mas ! Mass of incident particle(MeV)
292 integer maxnum ! Maximum size of cluster(not used now).
293 integer soo ! Flag allowing to write.
294 integer oo ! Output stream number.
295 integer debug ! Flag allowing to write
296 ! more amount of information.
297
298 Output parameters:
299 real density ! Density of the gas.
300 ! It calculates for ideal gas.
301 real dedx ! Mean dE/dx, mean energy loss, KeV/cm.
302 real ntotal ! Average total number of
303 ! liberated conduction electrons.
304 real nclust ! number of clusters per cm.
305 real clprob(msize) ! Probability of the clusters,
306 ! Size=index.
307 integer ierror ! Sign of error( 0 -- no error ).
308
309 For pointing to molecules the user is suggested to use the named
310 constants (only in symbolic form) defined in the file molecules.inc The
311 named constant pqMol is defined into the file molecules.inc.
312 The weights may not be nolmalized. The subroutine does this
313 itself. Some of the weights may be zero. The subroutine excludes such
314 items.
315 If pres=0, the standart atmosferic pressure, 760 Torr is substituted.
316 If temp=0, the standart atmosferic temperature, 293 K is substituted.
317 If pmas=0, the proton mass, 938 MeV is substituted
318 If tkener=0, the 'mip' is generated, gamma=4, tkener=pmas*3.
319
320 The named constant msize is defined into file hs.inc, now it is
321 10000, that is the maximum cluster size, for which the probability is
322 calculated. This is just a formal approach, in real life such a big cluster
323 either will be like to a big cloud of ionization, or to a track going to
324 outside of the gas volume.
325 The probabilities for the clusters up to 20 electrons are calculated
326 by method Monte-Carlo with 1000 events. The probabilities for more large
327 clusters is calculated by an analitical approach, taking into account only
328 the cross section of energy transfers and dividing the transferred energy
329 on the mean work per pair production. The mean energy loss and total
330 electron number are computed analitically from integral of cross section.
331 The number of clusters is restored from Monte-Carlo and it may be affected by
332 a little statistical fluctuations, as soon as probabilities of the first
333 20 clusters. Note, all of this is related only to SHEED subroutine, solving
334 the partial problem.
335 The output parameter ierror is 1 if error is detected. All the
336 other output results is to be eliminated in this case. Any error messages
337 are printed to stream 'oo' regardless of value of the flag 'soo'. The
338 usual HEED listing is printed to the same stream provided that soo=1. A
339 little listing is printed if debug=0 or 1 and a very big listing useful
340 only for developers is printed if debug>=2.
341 The subroutine can be called several times from one program.
342
343
344 Calling HEED in the form of subroutines
345 ---------------------------------------
346
347 The program was developed for using as a stand-alone program.
348 However, generating initial ionization it can not watch for its drift
349 to electrodes, and it may be necessary to combine it with another
350 chamber-simulation package. There are three ways of doing this:
351 to link a drift-simulation subroutine to HEED,
352 to link the HEED in the form of subroutines to a drift-simulation program,
353 or to connect two separate programs through intermediate file or stream.
354 The first and the last way are opened for user, while the second requires
355 some little changes in the program. Moreover, the process of initialization
356 may seem not enough simple for a user who wants to solve a simplest task with
357 one-layer geometry. To make the second way available and simple we
358 developed some interface subroutines, which get all setup information as
359 simple parameters. The generated ionization can be taken from well
360 discribed common blocks.
361 Unfortunately, it is difficult to return the output information
362 through the parameters, becouse of large amount of it.
363 The user has to extract what he needs from common blocks.
364 Therefore he may need to get familiar with the following general manual.
365 Only one gas can be initialized when using HEED by this way.
366 The work is naturally divided into initialization stage and event
367 processing stage. So as to reduce the number of the parameters of the
368 initializating subroutine, we split the subroutine into several ones.
369
370 Initialization of the matter:
371 call IMHEED
372 + (qmol, nmol, wmol, pres, temp, soo, oo, debug,
373 + density, ierror)
374 All these parameters have the same type and sense as for SHEED:
375 Input parameters:
376 integer qmol ! Quantity of different molecules
377 ! in the gas mixture.
378 integer nmol(pqMol) ! Their numbers from molecules.inc.
379 ! Use only the named constants
380 ! for compartibility with future versions.
381 real wmol(pqMol) ! Their weights
382 ! (relative quantities of molecules).
383 real pres ! Pressure in Torr.
384 real temp ! Temperature in K.
385 integer soo ! Flag allowing to write to stream oo.
386 integer oo ! Output stream number.
387 integer debug ! Flag allowing to write
388 ! more amount of information.
389
390 Output parameters:
391 real density ! Density of the gas.
392 ! It calculates for ideal gas.
393 integer ierror ! Sign of error( 0 -- no error ).
394
395 For pointing to molecules user is sugested to use the named
396 constants (only in symbolic form) defined in the file molecules.inc The
397 named constant pqMol is defined into the file molecules.inc.
398 The weights may not be nolmalized. The subroutine does this
399 itself. Some of the weights may be zero. The subroutine excludes such
400 items.
401 If pres=0, the standart atmosferic pressure, 760 Torr is substituted.
402 If temp=0, the standart atmosferic temperature, 293 K is substituted.
403
404
405 Initialization of the volume:
406 It is doing by standart routines from HEED. User can build any number
407 of volumes, but since only one gas can be initalized, usually only
408 one volume can be necessary (there is no any restrictions in stand-alone
409 form). It is initialized by:
410 call IniFVolume(0, 1, 1, 1, left_borber, width )
411 where left_borber and widt are real amd measured in cm.
412
413
414 Initialization of the particle:
415 call IPHEED
416 + (tkener, mas, debug,
417 + ierror)
418
419 real tkener ! Kinetic energy of incident particle (MeV)
420 real mas ! Mass of incident particle(MeV)
421 If pmas=0, the proton mass, 938 MeV is substituted
422 If tkener=0, the 'mip' is generated, gamma=4, tkener=pmas*3.
423 This subroutine defines the parameters of the particle which is
424 automatically generated later at the begin of simulation of each event.
425
426
427
428 Initialization of the track:
429 The track can be initialized by the program IniRTrack.
430 call IniRTrack(ystart1, ystart2, pang, pphiang)
431 real ystart1 and ystart2 - bounds of interval on y-axis,
432 where the start point can be. The start point
433 is randomly placed inside these bounds.
434 They can be equal and the point will be fixed.
435 real pang - theta angle between the traectory and the z - axis
436 real pphiang - phi angle (turn around z-axis relativaly x-axis)
437 The track can be initialised one or more times. The next track
438 initialization deletes the old track.
439
440
441 The output parameter ierror is 1 if error is detected. All the
442 other output results is to be eliminated in this case. Any error messages
443 are printed to stream 'oo' regardless of value of the flag 'soo'. The
444 usual HEED listing is printed to the same stream provided that soo=1. A
445 little listing is printed if debug=0 or 1 and a very big listing useful
446 only for developers is printed if debug>=2.
447 The subroutines can be called several times from one program.
448
449 The simulation of the events is done by
450 call GoEventn(nevt,qevt) ! Simulation of one event
451 Here nevt is number of the current event and qevt is the number
452 of the events ordered. In principal the standart GoEvent can be called,
453 if to include into user's program GoEvent.inc
454 The GoEvent must know the number of the current event
455 and the total ordered event number. If there was an overflow
456 of any controlled array - arrays with delta-electrons,
457 conduction electrons, real photons, virtual photons,
458 the GoEvent prints the wornings and auxiliary information
459 to the 'oo' after the last event generated. Therefore it must know which
460 event is last. So as to avoid including of GoEvent.inc ,
461 where the event number nevt and quantity of events qevt are stored,
462 user can call GoEventn ,that takes nevt and qevt as arguments and
463 simulates ONE event.
464
465 So as to reduce the required memory, it is sensible to
466 reduce the maximal numbers of volumes of every kind (see volume.inc)
467 to 1. To have a possibility to treat volume woth more width,
468 the number of the conduction electrons (pqcel in cel.inc) can be increased.
469 The major comsumer of the memory is cel.inc.
470
471 This is the end of the manual of calling of HEED in the form of subroutines.
472
473
474 Geometry
475 --------
476
477 The detector is represented by a structure of geometrical volumes.
478 The volumes is filled with different materials. Each volume represents a
479 part of the detector. Having considered the practical applications we
480 formulated a simple geometrical model, ensuring simple and fast tracking.
481 The allowed geometrical configuration is a 3-dimensional space divided by
482 a parallel planes into a sequence of volumes. The widths and the number of
483 the volumes are arbitrary. Their dimensions along the planes are infinite.
484 The first and the last plane are the borders of the detector.
485 For example, the detector may consist of one or several multiwire
486 proportional chambers with insensitive solid plates and a sensitive gas
487 between them.
488 The coordinate system is oriented by such a way that z-axis is
489 perpendicular to the planes. Thus the volumes are considered to be
490 infinite along x- and y-directions.
491 The angle between z-axis and the direction of moving of the
492 incident particle is denoted theta. The polar angle is measured relatively
493 x-axis (around z-axis) and denoted phi. The theta angle must be less than pi/2. The
494 phi-angle is arbitrary. Thus the incoming particle comes from z=-infinity
495 and traverses the layers consequently from left to right.
496 The incident particle can move by a straight trajectory or by a
497 broken line determined by the multiple scattering. The photons (primary or
498 secondary) and all the secondary particles are thoroughly tracked through
499 the multi-layer structure.
500
501
502 Structure of the program
503 ------------------------
504
505 Logically, there are three phases of the algorithm:
506 -Initialization
507 -Event processing
508 -Termination
509 The initialization phase consists of computing and storing of some
510 auxiliary data, which are necessary during event processing. The source
511 text of the program does not imply a concrete geometry, materials and any
512 other conditions related to particular problems. These data must be
513 allocated in common blocks during the initialization phase. To do this the
514 program calls the subroutine IniHeed. This subroutine has to be provided
515 by the user. It has to consist of the following steps, most of them
516 performed through calls to another HEED subroutines:
517 - set general parameters
518 - parameters for HBOOK
519 - output
520 - energy mesh
521 - atoms
522 - molecules
523 - materials
524 - incident particle
525 - cross sections
526 - track
527 All the data recorded to the common blocks during this phase
528 are kept there till end of run.
529 The processing of every event is also divided into three simular
530 phases:
531 - Event initialization
532 - Event processing
533 - Termination
534 During the event initialisation phase the information
535 about the previous event is deleted and the memory is prepared to record
536 the new event. The standart event initialisation does not require user
537 interventions. For non-standart cases the subroutine UBegEvent is called
538 after the standart initialisation have been done. This subroutine has to
539 be provided by the user. For example, it can initialize another user's
540 common blocks or generate an external photons or delta-electrons. For
541 trivial applications this subroutine may be empty. Having simulated each
542 event the program fills the predefined histograms and calls the subroutine
543 UEndEvent. This subroutine has to be provided by the user. Any treatment
544 of the information about the event can be carried out in it, all the
545 information being accessible here. The user defined histograms are to be
546 filled in this subroutine. For trivial applications this subroutine may
547 also be empty.
548 During the program termination phase all the histograms are
549 written into disk file.
550 Thus, the user has to prepare 3 subroutines: IniHeed, UBegEvent,
551 UEndEvent. The last two ones may be empty.
552 The program makes use two output streams and no input stream. The
553 text data, wornings, messages about errors and debug information are
554 directed to stream with logical number denoted 'oo', which has to be
555 determined by the user. There is possibility to ban all the output except
556 the messages about errors. Another output stream has the number 34 and it
557 is used only for saving of the histograms. This number is determined via
558 the parameter statament and it can be changed by the user. The filling and
559 saving of the histograms can be forbiden.
560 In case of errors the program prints a message and either
561 continues working or stops through the STOP operator.
562 The program is linked with the program libraries packlib and
563 kernlib.
564
565
566 Allocation of data
567 ------------------
568
569 All the important information is stored in common blocks. Data
570 base systems are not used. Dimensions of arrays is usually specified as
571 named constants, i.e. by names which are given to constants by the
572 PARAMETER statements. In the case of problems the values of these
573 constants can be changed by the user.
574 Each common block together with declarations of types of variables
575 is decribed in an only place. Before beginning of the compilation they
576 have to be included in the subroutines by a text processor. At the
577 developing phase, the INCLUDE compiler directive is used, it makes the
578 fortran compiler include the external file into the source text. This
579 directive is provided in majority of contemporary fortran compilers,
580 although it is not provided by the standart. The common blocks are placed
581 in separate files and included in relevant places of the text. To ensure a
582 maximum mobility, the program is converted into CMZ car-file, and in that
583 form it is presented for applications. The convertion is executed by
584 specially developed utulite, that provides copying every source file into
585 CMZ-deck with changing INCLUDE compiler directives to +SEQ
586 CMZ-directives and every included file is copying into a sequence. However
587 we continue to use the terms 'source file' and 'included file' in this
588 manual and in comments in program. Working with CMS-version it need to
589 remember that instead of included file, for example, 'myfilename.inc' one
590 should operate with sequence with the same, no more than 8-characters name
591 without extension '.inc': 'myfilena'. Analogously, 'myfilename.f' would
592 turn to deck 'myfilena'.
593 The IMPLICIT NONE statament is used in every routine. The types of
594 names are determined explicitly. There are some rules we attempt to follow
595 choosing the names. Two of them need to be mentioned here, since they
596 differ from conventional ones and they are used throughout the program:
597 -Variables with first character 'q' mean usially quantity(number)
598 of somethings and they are integer.
599 -Variables with first characters 'pq' mean usially maximum allowed
600 quantity of something, they are names of integer constant, their values
601 are determined by the PARAMETER statements, they are usually used as the
602 dimensions of the arrays.
603 The sense of common blocks variables and arrays is explaned in
604 comments placed near the type declarations. Values of all these variables
605 can be printed out in a readable form by special subroutines, each common
606 block being printed by separate subroutine. Also there are separate
607 subroutines for initialization of common blocks.
608
609
610 The Dimensional Units
611 ---------------------
612
613 Unless otherwise specified, the following units are used throughout
614 the program:
615 GRAMM, CENTIMETER, MEV, MEV/C, RADIAN, TORR, K
616
617
618 The included files
619 ------------------
620
621 The included files contain the text of the definitions of the
622 common blocks followed by the specifications of the types of the incoming
623 variables and the specifications of types and values of the named
624 constants. Usually all these variables are kept in one common block,
625 rarely in two, the named constants do not allocated in common blocks at
626 all. Since the common block names are not mentioned in the source text of
627 the program, they are only of technical importance (they must not coincide
628 one with another and so on). Therefore speaking about the common blocks we
629 will mean rather groups of defined in one include file variables and
630 constants, and we will denote them by the names of the included files,
631 where they are defined. If such a file is included in subroutine, all the
632 variables, arrays and constants discribed there become accessible, and no
633 matter where and how they are allocated.
634 The following table contains the included file names and the their
635 destination. The character 'i' means that the contents are changed
636 (initialized) during initialisation phase. The character 'e' means that
637 the program recordes data there during the event processing. The character
638 'w' means that the user have to assing values to some variables from this
639 included file using the assignment statement (=).
640
641 -----------------------------------------------------------------
642 The included files
643 -----------------------------------------------------------------
644 w i e r | GoEvent.inc Main control variables
645 | LibAtMat.inc Numbers of atoms
646 e | abs.inc Photons which is ready to absorb
647 i | atoms.inc Atomic data
648 i e | bdel.inc information about delta electrons tracking
649 | cbdeldat.inc fit of elastic electron cross sections
650 | cconst.inc world constants
651 e r | cel.inc conduction electrons information
652 i | crosec.inc cross sections of energy transfer of ionization loss
653 e | del.inc delta-electrons information
654 i | ener.inc energy mesh for ionization loss and photon absorbtion
655 w i | hist.inc histograms
656 e | lsgvga.inc ionization energy transfers
657 | (used only for filling of histograms)
658 w i | matters.inc matters data
659 i | molecdef.inc molecular information
660 r | molecules.inc list of molecular numbers
661 i r | part.inc primary particle data
662 e | raffle.inc auxiliary common for the ionization loss simulation
663 w i e | random.inc auxiliary data for random number generator
664 e | rga.inc real photons
665 i | shellfi.inc auxiliary, for communication Iniatom with shellfi
666 i | shl.inc shell information - probability of channels and
667 | energies of secondary particles
668 |
669 i | tpasc.inc auxiliary, for communication Iniatom with tpasc.f
670 i e | track.inc primary particle track information
671 i r | volume.inc information about volumes
672 ------------------------------------------------------------------
673
674 There are four included files with several variables needed to be
675 asigned and this required only at initialisation of the program.
676
677 ---------------------------------------------------------------------
678 GoEvent.inc:
679 integer soo ! Flag, allowing to print
680 ! to stream 'oo'
681 ! If it is 0, no print will be at all,
682 ! except the case of serious problems.
683 integer oo ! The output stream logical number.
684 integer qevt ! Quantity of events to produce.
685 integer ssimioni ! Sign to simulate ionization loss,
686 ! 0 - no ionization,
687 ! 1 - normal ionization.
688
689 hist.inc:
690 integer sHist ! Sign to fill histograms
691 character*100 HistFile ! File name for file
692 ! with histograms.
693 real maxhisampl ! maximum amplitude for histograms
694 real maxhisampl2 ! reduced maximum amplitude for histograms
695 real maxhisample ! maximum amplitude for histograms
696 ! in units of numbers of the electrons.
697 integer pqhisampl ! quantity for histograms with amplitude.
698 integer shfillrang ! sign to fill special histogram nh2_rd
699 ! with practical range of delta electron
700 ! It takes some computer time.
701 random.inc:
702 integer sseed ! Sign to start first event
703 ! from seed point of random number generator.
704 integer seed(2) ! Form for writting and inputting
705 ! without modification during
706 ! binary to demical transformation.
707 matters.inc:
708 real Cur_Pressure ! Current pressure for initializing medium.
709 ! During gas initialization
710 ! subroutine gasdens uses it for
711 ! calculating of density.
712 real Cur_Temper ! Current temperature for initializing medium.
713 ! During gas initialization
714 ! subroutine gasdens uses it for
715 ! calculating of density.
716 -----------------------------------------------------------------------
717
718
719 All the other common blocks are filled automatically and allowed for
720 reading only. There are two reasons why user may need to be familiar with
721 them:
722 - to check the initialisation and working of the program
723 - to obtain the results of calculations.
724 However, so as to avoid updating the manual after each little
725 modification in them, we do not want to include their listings into this
726 manual so far. Users are invited to print the common blocks marked with
727 character 'r' from his/her current version, they are of the first interest,
728 all the variables being thoroughly explained in the comments.
729
730
731 Simplified Program Flow Chart
732 -----------------------------
733
734 program MainHEED
735
736 call IniHeed ! User's subroutine,
737 ! initialization of the detector.
738
739 do nevt=1,qevt ! Loop over events.
740
741 call GoEvent ! Simulation of one event.
742
743 enddo
744
745 end
746
747 subroutine GoEvent
748
749 call UBegEvent ! User's subroutine.
750
751 ... ! Simulation of event.
752
753 call UEndEvent ! User's subroutine,
754 ! any treatment of
755 ! the event information.
756
757 end
758
759
760
761 The main program
762 ----------------
763
764 ------------------------------------------------------------------------
765 Listing . The main program, file MainHEED.f
766 ------------------------------------------------------------------------
767
768
769 program HEED
770 c
771 c The main program for HEED package
772 c
773 implicit none
774
775 integer NPW
776 PARAMETER (NPW = 2000000)
777 real H
778 COMMON /PAWC/ H(NPW)
779
780 include 'GoEvent.inc'
781 include 'volume.inc'
782 include 'hist.inc'
783
784
785 CALL HLIMIT(NPW)
786
787 call Iniranfl ! Initialization of the counter of
788 ! random number generator calls
789 call IniHeed ! User's subroutine,
790 ! Initialization of the detector
791
792 if(sHist.eq.1)then
793 call IniHist ! Initialization of inbilt histograms
794 endif
795
796
797 do nevt=1,qevt ! Loop over events
798
799 call GoEvent ! Simulation of one event
800
801 enddo
802
803
804
805 if(sHist.eq.1)then
806 call WHist ! Writting of histograms
807 endif
808
809
810 call Priranfl ! Print the number of calls of
811 ! random number generator
812 end
813
814 -----------------------------------------------------------------------
815
816
817 The event processor
818 -------------------
819
820 -----------------------------------------------------------------------
821 Listing 2. The event processor, file GoEvent.f
822 -----------------------------------------------------------------------
823
824
825 subroutine GoEvent
826 c
827 c Event processor. It is called from MainHEED.
828 c
829 implicit none
830
831 include 'GoEvent.inc'
832 include 'abs.inc'
833 include 'rga.inc'
834 include 'volume.inc'
835 include 'hist.inc'
836 include 'random.inc'
837
838 integer iempty
839
840
841 c if(nevt.le.ninfo)then
842 if(soo.eq.1)then
843 write(oo,*)
844 write(oo,*)' Event number ',nevt
845 endif
846 if(nevt.eq.1.and.sseed.eq.1)then
847 call randset ! Set the start point of
848 endif ! the random number generator.
849 if(soo.eq.1)then
850 call randget
851 call randpri(oo) ! Print the current point of
852 endif ! the random number generator.
853 c endif
854
855 call IniNTrack ! Generate the next track.
856 if(nevt.le.ninfo)then
857 call PriMTrack(0) ! Print debug information
858 call PriMTrack(1)
859 call PriMTrack(2)
860 call PriMTrack(3)
861 call PriMTrack(4)
862 endif
863
864 call IniLsgvga ! Initialize gvga.inc
865 call Iniabs ! Initialize abs.inc
866 call Inirga ! Initialize rga.inc
867 call Inidel ! Initialize del.inc
868 call Inicel ! Initialize cel.inc
869
870 call UBegEvent ! User's subroutine
871
872 if(ssimioni.eq.1)call rafflev ! Generate the primary energy transfers
873 ! from incoming particle
874
875 if(soo.eq.1)then
876 if(nevt.le.ninfo)then
877 write(oo,*)
878 call PriLsgvga ! Print debug information
879 endif
880 endif
881
882 do iempty=1,10000
883
884 if(soo.eq.1)then
885 if(nevt.le.ninfo)then
886 write(oo,*)
887 write(oo,*)' before absorption of virtual photons:'
888 call Priabs ! Print debug information
889
890 endif
891 endif
892
893 call AbsGam ! Absorb the virtual photons
894
895 if(soo.eq.1)then
896 if(nevt.le.ninfo)then ! Print debug information
897 write(oo,*)
898 write(oo,*)' after absorption of virtual photons:'
899
900 c call Priabs
901 call Prirga
902 call Pridel
903
904 endif
905 endif
906
907 call GoGam ! Absorb the photons
908
909 if(soo.eq.1)then
910 if(nevt.le.ninfo)then ! Print debug information
911 write(oo,*)
912 write(oo,*)' after absorption of photons:'
913
914 call Priabs
915 c call Prirga
916 call PrirgaF
917
918 endif
919 endif
920
921 if(ctagam.gt.qtagam.and.crga.gt.qrga)then
922 ! There are neither real no
923 ! virtual photons to trace.
924 goto 50 ! Exit the loop.
925 endif
926
927 enddo
928
929 50 continue
930
931
932 call treatdel ! Track the delta-electrons
933 ! and generate the conduction electrons.
934 call treatcel ! Treat the cel.inc
935 if(soo.eq.1)then
936 if(nevt.le.ninfo)then ! since there are calculation of ranges
937 ! which in wroute to del inside treatdel
938 write(oo,*)
939 call Pridel
940 endif
941 endif
942
943 if(sHist.eq.1)then
944 call Fhist ! Fill predetermined histograms
945 endif
946
947 call UEndEvent ! User's subroutine
948
949 if(soo.eq.1)then
950 if(nevt.eq.qevt)then
951 write(oo,*)
952 write(oo,*)nevt,' events is done'
953 ! Printing the wornings about overful
954 call WorPrirga
955 call WorPriabs
956 call WorPridel
957 call WorPricel
958
959 endif
960 endif
961
962
963 end
964
965
966 Initialization
967 --------------
968
969 As was said above the duty to provide the initialization
970 subroutine is imposed upon the user. We can present here only an example
971 of such subroutine and we hope that it is enough clear for understanding
972 and the user will not meet troubles making use it as a 'fish' for
973 preparation of his own analogous subroutine.
974
975 ---------------------------------------------------------------------------
976 listing 1 Example of IniHeed
977 ---------------------------------------------------------------------------
978
979
980
981 subroutine IniHeed
982 c
983 c
984
985 implicit none
986
987 include 'GoEvent.inc'
988 include 'hist.inc'
989
990 include 'ener.inc'
991 include 'atoms.inc'
992 include 'matters.inc'
993
994 include 'cconst.inc'
995 include 'volume.inc'
996 include 'part.inc'
997 include 'h31.inc'
998 include 'random.inc'
999
1000 real tkener,mas,momentum
1001
1002 integer i
1003 integer j
1004
1005
1006 real wid
1007
1008 real amc
1009 integer na
1010
1011
1012 soo=1 ! To allow (1) or to ban (0) printing to stream oo.
1013 oo=10 ! set logical number of output stream.
1014 open(oo,FILE='heed.out') ! open output disk file.
1015
1016 sret_err = 0 ! Stop if error is detected
1017
1018 c Auxiliary variables for histograms (from hist.inc)
1019 sHist=1 ! To allow (1) or to ban (0) dealing with histograms.
1020 HistFile='heed.hist' ! File name, where they are written to.
1021 maxhisampl=40.0e-3 ! Maximum aplitude.
1022 maxhisampl2=20.0e-3 ! Reduced maximum aplitude.
1023 maxhisample=150 ! Maximum aplitude in unit of number of elect.
1024 pqhisampl=100 ! Number of bins.
1025 shfillrang=1 ! To allow (1) or to ban (0) filling histogram nh2_rd.
1026
1027
1028 c Random number genarator
1029 sseed=0 ! To make the generator start from seed point (1)
1030 ! or from default point (0).
1031 seed(1)=1121517854 ! this is example for sseed=1
1032 seed(2)=612958528
1033
1034
1035 qevt=1000 ! Quantity of events to generate
1036
1037 ssimioni=1 ! To allow ionization loss (1) or to ban it (0)
1038 ninfo=0 ! Number of first events with output listing
1039
1040
1041
1042
1043
1044
1045
1046
1047 call Inishl ! Cascade from excited atom
1048
1049 call IniEner(150,3e-6,0.2) ! Energy mesh
1050 c call PriEner
1051
1052 call AtomsByDefault ! Library of atoms
1053 c call PriAtoms(0)
1054
1055 Cur_Pressure=Atm_Pressure
1056 Cur_Temper=Atm_Temper
1057
1058 call CO250CF420Ar30(1) ! Material from LibAtMat
1059
1060 c call PriMatter(0)
1061
1062 wid=0.5
1063
1064
1065 call IniFVolume(1, 1, 1, 0, 0.0, wid ) ! Volume
1066
1067 c call PriVolume
1068
1069
1070
1071
1072
1073 mas=105.0 ! muon
1074 momentum=100000.0
1075 tkener=sqrt(mas*mas+momentum*momentum)-mas
1076
1077 call IniPart(tkener,mas) ! Particle
1078 call PriPart
1079
1080
1081 call IniRTrack(0.0, 0.0, 0.0, 0.0) ! Track
1082 call PriTrack
1083
1084 call IniCrosec ! Cross sections
1085 c call PriCrosec(1,4)
1086
1087
1088 call InisBdel ! Data for tracking of delta-electrons
1089
1090 call PriBdel(0)
1091
1092
1093
1094 end
1095
1096 ---------------------------------------------------------------------------
1097
1098 This example is so simple that subroutins UBegEvent and UEndEvent
1099 do not need to do anything. They can be just empty. Therefore they are not
1100 printed here. The results of calculations are histograms contained in the
1101 file 'heed.hist'.
1102
1103
1104 The program is using some information about the secondary
1105 radiation from exited atom. It is saved in the common block from "shl.inc".
1106 This information has a difficulte structure, which is initialized by
1107 special program "Inishl". One should just call the subroutine "Inishl"
1108 before any others. Users are strongly recommended to begin their
1109 simulation with the parameters as stored by Inishl. Users who want to
1110 modify any of these parameters must be sure they understand their function
1111 in the program and the implications of a change.
1112
1113
1114 The subroutine IniEne initializes the energy mesh for internal
1115 calculations. It is used in calculations of ionization loss and photon
1116 absorption. The points are equally spaced on a logarifmic scale.
1117 call IniEne(q,emin,emax)
1118 int q - quantity of the points. 100-200 is recomended.
1119 real emin - the minimum energy. It must be less than minimum for
1120 photo absorbtion cross section. 5 eV is recomended.
1121 real emax - the maximum energy. It must be several times more than
1122 maximum of the shell energies. 200 KeV is recomended.
1123 This subroutine initializes the common block from file "ener.inc" .
1124
1125 Almost all the arrays with atomic, matters, cross-section information
1126 corresponds to the centers of the energy intervals, each value being the
1127 overage of a parameter on this interval.
1128
1129
1130 Initialisation of the atoms
1131 ---------------------------
1132
1133 The atomic information is allocated in the file atom.inc. The
1134 atoms are assigned numbers. The numbers are indexes of array elements,
1135 where the atomic information is saved. These numbers are used as the
1136 pointers to the atoms throughout the program. The atoms can be initialized
1137 in arbitrary order. The empty places are allowed. The program uses the
1138 variable Zat (charge of atomic nucleus) as a sign of whethere the atom is
1139 initialized, the atom being initialized if it is positive, nonzero. An
1140 attempt to refere to an empty place or to initialize the atom twice
1141 usually causes the program stop immediately, the error message being
1142 printed.
1143
1144
1145 There is a list of the predetermined atoms, it contains all the
1146 most often used atoms, see LibAtMat.inc. It is initialized by
1147 call AtomsByDefault .
1148 If the necessary atom is not included in
1149 this list, it need to increase parameter pQAt (atoms.inc) and initialize
1150 the new atoms in free places, calling the subroutine IniAtom. (The IniAtom
1151 knows the atom numbers from LibAtMat.inc and it carried out a special
1152 algorithms for some of them. Thus, even if AtomsByDefault is not called,
1153 the new atoms have to be initializaed on different places.) The subroutine
1154 IniAtom initializes the atomic data.
1155 call IniAtom(num,z,a)
1156 int num - internal number of the atom. It can not be
1157 less than zero and larger than pQAt-maximun
1158 quantity of the atoms.
1159 pQAt is set in atoms.inc and can be changed.
1160 There are no possibility to define atom with
1161 the same number second time. The program terminates if
1162 one of these errors are occured.
1163 int z - charge
1164 real a - atomic weight
1165 The information is writting to the 'atoms.inc'. Use subroutine PriAtoms
1166 so as to print all the atoms to the standart unit 'oo'.
1167
1168
1169 Initialisation of the materials
1170 --------------------------------
1171
1172 The information about materials is allocated in the file
1173 matters.inc. The matters are assigned numbers by the user.
1174 The numbers have the same meaning as the atom numbers.
1175 These numbers are used as the pointers to the matters throughout the program.
1176 The matters can be initialized in arbitrary order.
1177 The empty places are allowed. The program uses the variable QAtMat
1178 as a sign of whethere the matter is initialized, the matter being
1179 initialized if it is positive. An attempt to refere to an empty place or
1180 to initialize the atom twice usually causes the program stop immediately,
1181 the error message being printed.
1182
1183 There is a library of subroutines initializing various matters,
1184 mainly gases. They are placed in the file LibAtMat.f. The only argument of
1185 these subroutines is matter number. They use the atoms initialized by call
1186 AtomsByDefault.
1187
1188 There is a special package intended for initialisation of an
1189 arbitrary gas mixture. There are a list of predeterminated molecules in
1190 file molecules.inc. This list will be increased in the future. The gas
1191 mixture can be arbitrary mixture of these molecules. The subroutine
1192 molecdef initializes these molecules. The information is allocated in
1193 molecdef.inc and can be printed by call Primolec. The subroutine Inigas
1194 initializes a gas mixture:
1195 subroutine Inigas( nmat, qmol, nmol, pwmol, pres, temp)
1196 integer nmat ! Number of material
1197 integer qmol ! Quantity of different molecules
1198 ! in the gas mixture.
1199 integer nmol(pqMol) ! Their numbers in molecdef.inc
1200 ! accordingly with molecules.inc
1201 real pwmol(pqMol) ! Their weights
1202 ! (relative quantities of molecules).
1203 real pres ! Pressure in Torr.
1204 real temp ! Temperature in K.
1205
1206
1207 Finnally there is a basical subroutine IniMatter, capable to
1208 create any solid or gas.
1209 The subroutine IniMatter initializes the material.
1210 call IniMatter(num,Atom,Weight,q,dens)
1211 int num - internal number of the matter. It can not be
1212 less than zero and larger than pQMat-maximun
1213 quantity of the matters.
1214 pQMat is set in matters.inc and can be changed.
1215 There are no possibility to define matter with
1216 the same number second time. The program terminates if
1217 one of these error are occured.
1218 int Atom(*) - array of the atomic numbers(internal-see above).
1219 real Weight(*) - quantity of the atoms in the mixture.
1220 The sum may be not equal to one.
1221 int q - quantity of atoms.
1222 real dens - density of the matter.
1223 The information is writting to the 'matters.inc'.
1224 Use subr. PriMatter so as to print all the matters to the standart unit
1225 oo. The weights of atoms stored in matters.inc are corrected by the subr.
1226 IniMatter so as their sum is equal to 1.
1227
1228
1229 The function gasdens calculates the density of the gas. Pressure
1230 and temperature is taken from variables Cur_Pressure and Cur_Temper placed
1231 in matters.inc. The density is calculated by law of ideal gas.
1232 dens=gasdens(A,Weight,q)
1233 real dens - density in g/sm**3
1234 real A(*) - array of the molecular weights
1235 real Weight(*) - quantity of the molecules in the gase mixture
1236 The sum may be not equal to one.
1237 int q - quantity of the molecules
1238
1239
1240
1241
1242 Initialization of the Geometry
1243 ------------------------------
1244
1245 The geometrical model and the coordinate system is defined in
1246 section geometry at the begin of this document.
1247 The volumes is initialised consequently from right to left.
1248 There are three types of volumes here. There are two keys
1249 to define it, one combination is not allowed.
1250 They are:
1251 sSens - sign that it is sensitive volume i.e. proportional chamber.
1252 sIon - sign that the ionization loss must be here.
1253 Some of these sorts of volumes could refer to 0 as number of the matter.
1254 The following combinations are allowed:
1255 ---------------------------------
1256 matter number sSens sIon
1257 ---------------------------------
1258 0,any 0 0
1259 not 0 0 1
1260 not 0 1 1
1261 ---------------------------------
1262 Ionization loss may not be calculated anywhere since it can be too long.
1263 It is sensible to calculate them only in chamber gas and in special cases
1264 in the poliethilene or mylar around it. Zero matter number in all cases
1265 except last means vacuum. Therefore ionization or sensitive volume can not
1266 include vacuum.
1267
1268 The subroutine IniVolume initializes the first or the next volume
1269 on the right of the previous. The next two subroutins are more convinient.
1270 call IniVolume(nmat,sSens,sIon,sTran,cwall1,cwall2,wide)
1271 int nmat - number of the material
1272 int sSens - sign of the sesitivity.
1273 int sIon - sign of ionization loss.
1274 int sTran - sign of the transition radiator. Not using in LSG.
1275 real cwall1 - z-coordinate of the left side of the volume.
1276 It using only for the first volume.
1277 real cwall2 - z-coordinate of the right side of the volume.
1278 real wide - wide. Not using now.
1279
1280 Initialization of the first volume:
1281 call IniFVolume(nmat,sSens,sIon,sTran,cwall1,wide)
1282
1283 Initialization of the next volume:
1284 call IniNVolume(nmat,sSens,sIon,sTran,wide)
1285
1286 The quantity of the volumes can't be more than pqvol - max.
1287 quantity of the volumes. pqvol is defined in volume.inc and can be
1288 changed. All the volume parameters are saved in the volume.inc. You can
1289 print all the volume parameters by the program PriVolume.
1290 The convinuent possibility to calculate of the total radiation
1291 lenght is take a look into output listing. But for LST output must be done
1292 after IniLst so as to take into account radiator.
1293
1294
1295 Other Initializations
1296 ---------------------
1297
1298 The particle is initialized by
1299 call IniPart(tkener,mas)
1300 real tkener - kinetic energy (MeV)
1301 real mas - mass (MeV)
1302 Particle can be initialized one or more times. After each initialization
1303 the call IniCrosec is needed.
1304
1305
1306 The calculations of the energy transfer cross sections are made by
1307 subr. IniCrosec.
1308 call IniCrosec
1309 It calculates the cross section only for those matter, which are contined
1310 in the sensitive volumes and only for initialized particle. If you
1311 initialize the new particle you must call IniCrosec again.
1312
1313
1314 The initializations of data for delta-electrons tracing must be
1315 done by call InisBdel.
1316
1317
1318 The track can be initialized by the program IniRTrack.
1319 call IniRTrack(ystart1, ystart2, pang, pphiang)
1320 real ystart1 and ystart2 - bounds of interval on y-axis,
1321 where the start point can be. The start point
1322 is randomly placed inside these bounds.
1323 They can be equal and the point will be fixed.
1324 real pang - theta angle between the traectory and the z - axis
1325 real pphiang - phi angle (turn around z-axis relativaly x-axis)
1326 The track can be initialised one or more times. The next track
1327 initialization deletes the old track. Call IniCrosec is not need again.
1328
1329
1330 Initialization of the Histograms
1331 --------------------------------
1332
1333 There are several predefined histograms, described in files
1334 hist.inc and hist.f. They are treated automatically. The user program can
1335 define and fill any additional histograms, calling relevant HBOOK
1336 subroutines.
1337
1338
1339 Random Numbers Generators
1340 -------------------------
1341
1342 The only uniform random number generator is called throughout the
1343 program: function ranfl. It is just intermediate function intended for
1344 connection with one of the standart random number generators and allows to
1345 change it in case of need. But one ought to be careful, the correlations
1346 between the current and the next rundom numbers are found to worse the
1347 results. To pass from current generator to another one it need only to
1348 change the call of it inside the body of the function ranfl and to change
1349 three auxiliary functions in the same file:
1350 randset - set start point
1351 randget - get current point
1352 randpri - print current point.
1353 Since all the generators of the non-uniform numbers use uniform
1354 random number generator as well, we extracted all the necessary routines
1355 from CERNLIB and modified them inserting the call of ranfl:
1356 lranor - random numbers following Gauss distribution
1357 (modified rannor)
1358 lspois - Poisson distribution
1359 (modified poissn),(also a little error is corrected)
1360 hisran - random numbers following histogram
1361 (the same name as in CERNLIB)
1362 All of them is contined in file random.inc.
1363 Thus there is the only random number sequence used in all the
1364 program. Therefore the program can repeat the simulations starting from
1365 any event. For this purpose, at the begin of each event the program prints
1366 the seed numbers.
1367
1368
1369 Files With Text of Program
1370 --------------------------
1371
1372
1373 PSHEED.f # check of SHEED
1374 SHEED.f # the main subroutine instead of program,
1375 # cluster size distibution
1376 UEventS.f # subroutine for SHEED
1377 MainHEED.f # main program
1378 GoEvent.f # generate one event
1379 IniHeed1.f # users routine for setup initialization
1380 UEvent1.f # users routine for work with event
1381 IniEner.f # energy net initialization
1382 logscale.f # function for logariphmic scale generation
1383 Inishl.f # atomic channels genaration
1384 LibAtMat.f # library of some atoms and matters
1385 molecdef.f
1386 Inigas.f
1387 IniAtom.f # atomic data initialization
1388 tpasc.f
1389 shellfi.f # subroutines for atomic data files reading
1390 line.f # auxiliary functions for straight line integration
1391 # and steps integration
1392 IniMatter.f # matter data initialization
1393 gasdens.f # gas density calculation
1394 IniVolume.f # volumes initialization
1395 IniTrack.f # track initializatin
1396 IniPart.f # particle initialization
1397 IniCrosec.f # ionization cross section initialization
1398 IniLsgvga.f # common lsgvga.inc initialization
1399 Inirga.f # common rga.inc initialization
1400 Iniabs.f # common abs.inc initialization
1401 raffle.f # ionization loss generator, filling abs.inc and lsgvga.inc
1402 GoGam.f # photons tracing till absorbtion, fills abs.inc
1403 AbsGam.f # photons absorbtion, fills del.inc and rga.inc
1404 IniBdel5.f # common bdel.inc initialization
1405 lstrel1.f
1406 Inidel.f # common del.inc initialization
1407 treatdel.f # treat delta-electrons and fill cel.inc
1408 Inicel.f # common cel.inc initialization
1409 treatcel.f # treat current electrons
1410 SourcePhot.f # auxiliary source of photons
1411 SourceDelEl.f # auxiliary source of delta-electrons
1412 vectors.f # vector algebra subroutins
1413 random.f # random number generators
1414 hist.f # histogram initialization and fill
1415
1416
1417
1418 +PATCH,HEEDCOM.
1419 +KEEP,molecule.
1420 integer pqMol ! Quantity of sorts of molecules.
1421 parameter (pqMol=25)
1422
1423 integer numm_He
1424 parameter (numm_He= 1)
1425
1426 integer numm_Ne
1427 parameter (numm_Ne= 2)
1428
1429 integer numm_Ar
1430 parameter (numm_Ar= 3)
1431
1432 integer numm_Kr
1433 parameter (numm_Kr= 4)
1434
1435 integer numm_Xe
1436 parameter (numm_Xe= 5)
1437
1438 integer numm_H2
1439 parameter (numm_H2= 6)
1440
1441 integer numm_N2
1442 parameter (numm_N2= 7)
1443
1444 integer numm_O2
1445 parameter (numm_O2= 8)
1446
1447 integer numm_NH3
1448 parameter (numm_NH3= 9)
1449
1450 integer numm_N2O
1451 parameter (numm_N2O= 10)
1452
1453 integer numm_CO2
1454 parameter (numm_CO2= 11)
1455
1456 integer numm_CF4
1457 parameter (numm_CF4= 12)
1458
1459 integer numm_CH4
1460 parameter (numm_CH4= 13)
1461
1462 integer numm_C2H2
1463 parameter (numm_C2H2= 14)
1464
1465 integer numm_C2H4
1466 parameter (numm_C2H4= 15)
1467
1468 integer numm_C2H6
1469 parameter (numm_C2H6= 16)
1470
1471 integer numm_C3H8
1472 parameter (numm_C3H8= 17)
1473
1474 integer numm_iC4H10
1475 parameter (numm_iC4H10= 18)
1476
1477 integer numm_C ! for debug
1478 parameter (numm_C = 19)
1479 *** Additions (RV 4/9/98).
1480 integer numm_DME
1481 parameter (numm_DME= 20)
1482
1483 integer numm_H2O
1484 parameter (numm_H2O= 21)
1485 *** Additions (RV 20/9/99).
1486 integer numm_SF6
1487 parameter (numm_SF6= 22)
1488
1489 integer numm_C2F4H2
1490 parameter (numm_C2F4H2= 23)
1491
1492 *** Addition (RV 14/1/00).
1493 integer numm_C5H12
1494 parameter (numm_C5H12= 24)
1495
1496 *** Addition (RV 25/2/00).
1497 integer numm_C2F5H
1498 parameter (numm_C2F5H= 25)
1499 *** End of additions.
1500
1501 c integer numm_CClF3
1502 c parameter (numm_CClF3= 19)
1503
1504 c integer numm_CClF2
1505 c parameter (numm_CClF2= 20)
1506
1507 c integer numm_CBrF3
1508 c parameter (numm_CBrF3= 21)
1509
1510 c integer numm_SF6
1511 c parameter (numm_SF6= 22)
1512 +KEEP,molecdef.
1513 integer pqSAtMol ! Max. allowed quantity of sorts of atoms
1514 ! in a molecule.
1515 parameter (pqSAtMol=3)
1516 integer qSAtMol ! Quantity of sorts of atoms in a molecules.
1517 integer nAtMol ! Number of atom in atoms.inc,
1518 ! see LibAtMat.inc.
1519 integer qAtMol ! Quantity of atoms of given sort in molecule
1520 real weiMol ! Molecular weight
1521 real WWWMol ! Mean work for pair production
1522 real FFFMol ! Parammeter Fano
1523 common / cmodef /
1524 + qSAtMol(pqMol),
1525 + nAtMol(pqSAtMol,pqMol),
1526 + qAtMol(pqSAtMol,pqMol),
1527 + weiMol(pqMol),
1528 + WWWMol(pqMol),
1529 + FFFMol(pqMol)
1530 save / cmodef /
1531 +KEEP,hs.
1532 integer msize
1533 parameter (msize=10000)
1534
1535 real prob,meanprob,meanvga,meanvgal
1536 real prob1
1537 integer qe
1538 common / h31 /
1539 + prob(msize),meanprob,meanvga,meanvgal,
1540 + prob1(msize)
1541 +KEEP,GoEvent.
1542 c Main control variables
1543
1544
1545 integer soo ! Flag, allowing to print
1546 ! to stream 'oo'
1547 ! If it is 0, no print will be at all,
1548 ! except the case of serious problems.
1549 integer oo ! The output stream logical number.
1550 integer qevt ! Quantity of events to produce.
1551 integer nevt ! Current number of the event.
1552 integer ninfo ! Quantity of the first events
1553 ! to print debug info.
1554 integer ssimioni ! Flag to simulate ionization loss,
1555 ! 0 - no ionization,
1556 ! 1 - to simulate ionization.
1557 !
1558 !
1559 !
1560 integer srandoff ! Flag to swich off the randomization
1561 ! in function treatdel.
1562 ! It is for debug and without guarantee.
1563 parameter (srandoff=0) ! Normal regim with randommization.
1564
1565 integer pqup ! dimensions of arrays of auxiliary
1566 ! parameters in abs.inc, rga.inc,
1567 ! del.inc
1568 parameter (pqup=1)
1569
1570
1571 integer sret_err ! Sign to return the control from current
1572 ! subroutine to which is called it if error is occured.
1573 ! 1 - to return, 0 - to stop.
1574 ! It is intended for handling with subroutine SHEED.
1575 ! In the case of error it can return the control instead of
1576 ! stop. But not for every possible errors return is done.
1577 ! Some of the most original errors could lead to stop.
1578 ! When working with HEED program, sret_err must be zero.
1579 integer s_err ! Sign of error.
1580 ! 1 - error, 0 - no error
1581
1582 character*9 TaskName ! Name of task, using for generating
1583 ! file names.
1584 character*40 OutputFile ! Name of file with output listing.
1585 ! Using only in IniHeed.
1586 common / cGoEve /
1587 + soo, oo,
1588 + qevt,nevt,ninfo,
1589 + ssimioni,
1590 + sret_err, s_err,
1591 + TaskName,
1592 + OutputFile
1593
1594 save / cGoEve /
1595
1596 +KEEP,ener.
1597 c Energy mesh
1598
1599 integer pqener,qener ! Max. quantity and quantity of bins.
1600 ! Quantity must not be more than pqener - 1.
1601 PARAMETER (pqener=501)
1602 real ener,enerc ! The left edges and the centers
1603 ! of the energy intervals.
1604 ! ener(qener+1) is the right edge
1605 ! of the last interval.
1606 C
1607 COMMON / coEner /
1608 + qener, ener(pqener), enerc(pqener)
1609 save / coEner /
1610 +KEEP,atoms.
1611
1612
1613 integer pQAt ! Max. quantity of atoms.
1614 parameter (pQAt=19)
1615 integer KeyTeor ! Key to use only theor. photo-absorbtion
1616 ! cross section with thresholds and
1617 ! weights from the subroutine shteor.
1618 ! If 0 then they are used only for
1619 ! the atoms which are absent
1620 ! in the subroutine readPas and
1621 ! in the subroutine shellfi.
1622 integer Zat ! Atomic number (charge of atomic nucleus).
1623 real Aat ! Atomic weight.
1624 integer pQShellAt ! Max. quantity of atomic shells.
1625 parameter (pQShellAt=17)
1626 integer QShellAt ! Quantity of atomic shells.
1627 real cphoAt ! Integral of photo-absorbtion
1628 ! cross secton for one atom.
1629 real ThresholdAt ! Threshold and
1630 real WeightShAt ! Weight of atomic shells for the
1631 ! photo-absorbtion cross secton
1632 ! relatively cphoAt.
1633 real PWeightShAt ! Initial integral of
1634 ! photo-absorbtion cross secton.
1635 real PhotAt ! Photo-absorbtion cross secton.
1636 real PhotIonAt ! Photo-ionization cross secton.
1637 c The physical definition of two previous arrays of values:
1638 c mean values of cross sections for each energy interval.
1639 real RLenAt ! Radiation lengt*density for dens=1
1640 real RuthAt ! Const for Rutherford cross cection
1641 ! (dimensionless).
1642 c integer num_at_mol ! Number for atoms in several special
1643 c ! molecules, now obsolete.
1644 real ISPhotBAt ! Shell integral of cs before normalization
1645 real IAPhotBAt ! Atomic integral of cs before normalization
1646 real ISPhotAt ! Shell integral of cs
1647 real IAPhotAt ! Atomic integral of cs
1648 real ISPhotIonAt ! Shell integral of cs
1649 real IAPhotIonAt ! Atomic integral of cs
1650 real MinThresholdAt ! Minimal ionization potential of atom.
1651 integer NshMinThresholdAt ! Number of shell with minimal energy,
1652 ! it must be the last shell ( see AbsGam.f)
1653 integer Min_ind_E_At, Max_ind_E_At ! Indexes of energy intervals
1654 ! where program adds excitation to cs
1655 ! They placed in common only to print and check.
1656 integer nseqAt ! Sequensed pointer in order of increasing Zat
1657 ! atom number nsAt(1) is least charged.
1658 integer QseqAt ! Quantity of initialized atoms
1659
1660 common / catoms /
1661 + KeyTeor,
1662 + Zat(pQAt), Aat(pQAt),
1663 + QShellAt(pQAt), cphoAt(pQAt),
1664 + ThresholdAt(pQShellAt,pQAt), WeightShAt(pQShellAt,pQAt),
1665 + PWeightShAt(pQShellAt,pQAt),
1666 + PhotAt(pqener,pQShellAt,pQAt),
1667 + PhotIonAt(pqener,pQShellAt,pQAt),
1668 + ISPhotBAt(pQShellAt,pQAt),
1669 + IAPhotBAt(pQAt),
1670 + ISPhotAt(pQShellAt,pQAt),
1671 + IAPhotAt(pQAt),
1672 + ISPhotIonAt(pQShellAt,pQAt),
1673 + IAPhotIonAt(pQAt),
1674 + MinThresholdAt(pQAt),
1675 + NshMinThresholdAt(pQAt),
1676 + Min_ind_E_At(pQAt), Max_ind_E_At(pQAt),
1677 + RLenAt(pQAt),
1678 + RuthAt(pQAt),
1679 + nseqAt(pQAt),
1680 + QseqAt
1681 save / catoms /
1682 +KEEP,matters.
1683 integer pQMat ! Max. quantity of matters.
1684 parameter (pQMat=10)
1685 integer QAtMat ! Quantity of atoms in matter.
1686 integer AtMAt ! Number of atom in matter
1687 ! (the pointer to atoms.inc).
1688 real WeightAtMat ! Weight of atom in matter.
1689 real A_Mean ! Average A.
1690 real Z_Mean ! Average Z.
1691 real DensMat ! Density (g/cm3).
1692 real DensMatDL ! Density (g/cm3) for energy loss of deltaelect.
1693 real DensMatDS ! Density (g/cm3) for mult. scat. of deltaelect.
1694 real ElDensMat ! Electron density(MeV3).
1695 real XElDensMat ! Longitud. Electron Dens. for x=1cm(MeV2/cm)
1696 real wplaMat ! Plasm frequancy.
1697 real RLenMat ! Radiation Lengt.
1698 real RuthMat ! Const for Rutherford cross section (1/cm3).
1699 real PhotMat ! Photoabsirbtion cross section per one atom.
1700 real PhotIonMat ! Photoionization cross section per one atom.
1701 real epsip ! plasm dielectric constant.
1702 real epsi1 ! real part of dielectric constant.
1703 real epsi2 ! imaginary part of dielectric constant.
1704 real min_ioniz_pot ! Minimum ionization potential,
1705 ! it is using only for switching off
1706 ! the Cherenkov radiation below it.
1707 real Atm_Pressure ! Standart atmosferic pressure.
1708 parameter (Atm_Pressure=760.0)
1709 real Cur_Pressure ! Current pressure for initialized medium.
1710 ! During gas initialization
1711 ! the subroutine gasdens uses it for
1712 ! calculating of density.
1713 real Pressure ! Pressure for given medium.
1714 real Atm_Temper ! Standart atmosferic temperature.
1715 parameter (Atm_Temper=293.0)
1716 real Cur_Temper ! Current temperature for initialized medium.
1717 ! During gas initialization
1718 ! the subroutine gasdens uses it for
1719 ! calculating of density.
1720 real Temper ! Temperature for given medium.
1721 real WWW ! The mean work per pair production.
1722 real FFF ! Fano parameter.
1723 common / cmatte /
1724 + QAtMat(pQMat),
1725 + AtMat(pQAt,pQMat),
1726 + WeightAtMat(pQAt,pQMat),
1727 + A_Mean(pQMat),Z_Mean(pQMat),
1728 + DensMat(pQMat),ElDensMat(pQMat),XElDensMat(pQMat),
1729 + DensMatDL(pQMat),DensMatDS(pQMat),
1730 + wplaMat(pQMat),
1731 + RLenMat(pQMat),
1732 + RuthMat(pQMat),
1733 + PhotMat(pqener,pQMat),
1734 + PhotIonMat(pqener,pQMat),
1735 + epsip(pqener,pQMat),
1736 + epsi1(pqener,pQMat),
1737 + epsi2(pqener,pQMat),
1738 + min_ioniz_pot(pQMat),
1739 + Cur_Pressure,Pressure(pQMat),
1740 + Cur_Temper,Temper(pQMat),
1741 + WWW(pQMat),FFF(pQMat)
1742 save / cmatte /
1743 +KEEP,crosec.
1744 integer pQShellC ! Max quantity of shells for all atoms
1745 ! in one material
1746 parameter (pQShellC=20)
1747 c integer MatC ! Matter number
1748 integer sMatC ! Sign to calculate sross section
1749 ! for this matter
1750 integer QShellC ! Quantity of shells for all atoms
1751 ! in this matter
1752 c real ksi ! Help Landau constant
1753 c ! (it seems it is't used)
1754 real log1C ! first log
1755 real log2C ! second log
1756 real chereC
1757 real chereCangle
1758 real addaC ! energy tranfer cross section
1759 real quanC ! it's integral,
1760 ! or quantity of energy transfers,
1761 ! or primary cluster number.
1762 real meanC ! first moment,
1763 ! or restricted mean energy loss, Mev.
1764 real meanC1 ! first moment with whole additional tail
1765 ! to emax - kinematically allowed transition.
1766 ! Now it is calculated only for heavy particles
1767 ! because the integral for electrons is not
1768 ! trivial,
1769 ! or mean energy loss, Mev.
1770 real meaneleC ! expected restricted quantity of
1771 ! secondary ionization.
1772 real meaneleC1 ! expected quantity of secondary ionization.
1773 integer NAtMC ! number of atom in the matter
1774 ! for shell with corr. index
1775 integer NAtAC ! number of atom
1776 integer NSheC ! number of shell
1777
1778 real flog1
1779 real flog2
1780 real cher
1781 real rezer
1782 real frezer
1783 real adda
1784 real fadda
1785 real quan
1786 real mean
1787
1788 complex*16 pocaz ! it is help
1789 ! coefficient at y
1790 ! the value of imajinary part
1791 ! corresponsd to with of wave front
1792
1793 common / ccrosec /
1794 + pocaz(pqener,pQMat),
1795 + sMatC(pQMat),
1796 + QShellC(pQMat),
1797 c + ksi(pQMat),
1798 + log1C(pqener,pQMat),
1799 + log2C(pqener,pQMat),
1800 + chereC(pqener,pQMat),
1801 + chereCangle(pqener,pQMat),
1802 + addaC(pqener,pQMat),
1803 + quanC(pQMat),
1804 + meanC(pQMat),
1805 + meanC1(pQMat),
1806 + meaneleC(pQMat),
1807 + meaneleC1(pQMat),
1808 c
1809 + NAtMC(pQShellC,pQMat),
1810 + NAtAC(pQShellC,pQMat),
1811 + NSheC(pQShellC,pQMat),
1812 c
1813 + flog1(pqener,pQShellC,pQMat),
1814 + flog2(pqener,pQShellC,pQMat),
1815 + cher(pqener,pQShellC,pQMat),
1816 + rezer(pqener,pQShellC,pQMat),
1817 + frezer(pqener,pQShellC,pQMat),
1818 + adda(pqener,pQShellC,pQMat),
1819 + fadda(pqener,pQShellC,pQMat),
1820 + quan(pQShellC,pQMat),
1821 + mean(pQShellC,pQMat)
1822 save / ccrosec /
1823
1824 +KEEP,cconst.
1825 real*8 ELMAS ! Electron mass (MeV)
1826 parameter (ELMAS=0.51099906)
1827 real*8 FSCON ! Fine ctructure constant
1828 parameter (FSCON=137.0359895)
1829 real*8 ELRAD ! Electron radius (1/MeV)
1830 parameter (ELRAD=1.0/(FSCON*ELMAS))
1831 real*8 PI
1832 parameter (PI=3.14159265358979323846)
1833 real*8 PI2
1834 parameter (PI2=PI*PI)
1835 real*8 AVOGADRO
1836 parameter (AVOGADRO=6.0221367e23)
1837 real*8 PLANK ! Plank constant (J*sec)
1838 parameter (PLANK=6.6260755e-34)
1839 real*8 ELCHARGE ! Electron charge (C)
1840 parameter (ELCHARGE=1.60217733e-19)
1841 real*8 CLIGHT ! Light vel.(sm/sec)
1842 parameter (CLIGHT=2.99792458e10)
1843 c real pionener
1844 c parameter (pionener=0.000026)
1845
1846 +KEEP,volume.
1847 c descriptions of the geometry of the setup
1848
1849 integer pqvol ! Max. quantity of volumes
1850 parameter (pqvol=150)
1851 integer pQSVol ! Max. quantity of sensitive volumes
1852 parameter (pQSVol=130)
1853 integer pQIVol ! Max. quantity of ionization volumes
1854 parameter (pQIVol=130)
1855 integer QSVol
1856 integer QIVol
1857 integer qvol ! quantity of volumes
1858 integer upVol ! user's volume parameter
1859 integer nMatVol ! Material number for volume
1860 integer sSensit ! Sign of sensitivity
1861 integer sIonizat ! Sign of ionization
1862 real*8 wall1,wall2,wide ! Left, right side and wide of volume
1863 integer numSensVol,numVolSens ! pass from Volume number
1864 ! to Sensitive volume number
1865 integer numIoniVol,numVolIoni ! The same for ionization
1866 real RLenRVol, RLenRAVol ! Radiation lengt for each volumes
1867 ! and for whole detector.
1868 integer xxxVol ! dummy, for efficient alignment
1869 common / cvolum /
1870 + qvol,
1871 + QSVol,QIVol, xxxVol,
1872 + upVol(pqvol), nMatVol(pqvol), sSensit(pqvol),
1873 + sIonizat(pqvol),
1874 + wall1(pqvol),wall2(pqvol),wide(pqvol),
1875 + numSensVol(pqvol),numVolSens(pQSVol),
1876 + numIoniVol(pqvol),numVolIoni(pQIVol),
1877 + RLenRVol(pqvol),RLenRAVol
1878 save / cvolum /
1879 +KEEP,part.
1880 c The incoming particle.
1881 c After changing the particle you have
1882 c to recalculate crossec
1883 real tkin,mass ! Kin.energy
1884 real*8 beta2,beta12 ! Beta**2 and 1.0-Beta**2
1885 real emax ! Max. energy of delta electron
1886 real bem ! beta2/emax
1887 real coefPa ! help const
1888 c It is in energy transfer cross sections:
1889 c Alpha
1890 c ----------
1891 c beta2 * pi
1892 real partgamma ! gamma factor
1893 real partmom,partmom2 ! momentum and momentum**2
1894 integer s_pri_elec ! Sign that primary particle is electron.
1895 ! It is recognized by mass near to 0.511
1896 ! In some parts of program the direct condition
1897 ! like mass < 0.512 is used.
1898 common / cpart /
1899 + tkin,mass,
1900 + beta2,beta12,
1901 + partgamma,
1902 + partmom,partmom2,
1903 + emax,
1904 c + ecut,
1905 + bem ,
1906 + coefPa,
1907 + s_pri_elec
1908 save / cpart /
1909 +KEEP,hist.
1910
1911
1912 integer sHist ! Sign to fill histograms
1913 character*100 HistFile ! File name for file
1914 ! with histograms.
1915 integer HistLun ! Logical number of stream to write
1916 ! this file.
1917 parameter (HistLun=34)
1918
1919 real maxhisampl ! maximum amplitude for histograms
1920 real maxhisample ! maximum amplitude for histograms
1921 ! in units of electrons
1922 real maxhisampl2 ! reduced maximum amplitude for histograms
1923 integer pqhisampl ! quantity for histograms with amplitude.
1924 integer pqh
1925 parameter (pqh=100) ! usual number of divisions
1926 integer pqh2
1927 parameter (pqh2=200) ! increased number of divisions
1928
1929 integer shfillrang ! sign to fill special histogram nh2_rd
1930 ! with practical range of delta electron
1931 ! It spends some computer time.
1932 integer MaxHistQSVol
1933 parameter (MaxHistQSVol=50) ! Maximum number of volumes,
1934 ! used at initilisation of histograms.
1935 ! If the number of the sensitive volumes
1936 ! is more,
1937 ! only MaxHistQSVol histograms will be created
1938 ! and they will represent
1939 ! the first MaxHistQSVol volumes
1940 integer hQSVol ! working number -- minimum of
1941 ! MaxHistQSVol end QSVol
1942 ! Defined in Inihist
1943
1944 c Determination of histogram numbers:
1945
1946 c Notation nh1 is number of 1-dimension histogram
1947 c Notation nh2 is number of 2-dimension histogram
1948
1949
1950 integer nh1_ampK
1951 parameter (nh1_ampK=100) ! amplitude (KeV)
1952 ! Some fluctuations may be here if
1953 ! each single bin of this histogram corresponds
1954 ! to differrent numbers of bins of
1955 ! nh1_ampN histogram.
1956 integer nh1_ampKR
1957 parameter (nh1_ampKR=150) ! amplitude (KeV)
1958 ! Special treatment is applyed to smooth
1959 ! the fluctuations mentioned above.
1960 ! It increases the mean square dispersion
1961 ! on a little value sqrt(1/12)* w .
1962 integer nh1_ampN
1963 parameter (nh1_ampN=200)! amplitude in numbers of conduction electrons.
1964
1965 integer nh1_cdx ! charge distribution along x
1966 parameter (nh1_cdx=300)
1967 integer nh1_cdy ! charge distribution along y
1968 parameter (nh1_cdy=500)
1969 integer nh1_cdz ! charge distribution along z
1970 parameter (nh1_cdz=700)
1971
1972 integer nh2_ard ! Actual range of delta-electron(cm)
1973 parameter (nh2_ard=900) ! vs energy(MeV).
1974 integer nh2_rd ! Range along initial direction of
1975 parameter (nh2_rd=901) ! delta-electron vs energy.
1976 integer nh1_rd ! Range along initial direction of
1977 parameter (nh1_rd=902) ! delta-electron (cm).
1978
1979 common / chist /
1980 + sHist,
1981 + maxhisampl,
1982 + maxhisample,
1983 + maxhisampl2,
1984 + pqhisampl,
1985 + shfillrang,
1986 + hQSVol
1987 save / chist /
1988 common / chhist /
1989 + HistFile
1990 save / chhist /
1991
1992 +KEEP,random.
1993 real*8 iranfl
1994
1995 integer sseed ! Flag to start first event
1996 ! from seed point of random number generator.
1997 real*8 rseed ! Place for seed.
1998 integer seed(2) ! Form for writting and inputting
1999 ! without modification during
2000 ! binary to demical transformation.
2001 equivalence (rseed,seed(1))
2002
2003 common / comran /
2004 + iranfl,
2005 + rseed, sseed
2006
2007 save / comran /
2008
2009 +KEEP,del.
2010 c Delta electrons
2011
2012 integer pqdel ! Max. q. of electrons
2013 parameter (pqdel=120000)
2014 integer qdel ! Q. of electrons
2015 C integer cdel ! Current electron (not used, RV 27/2/97)
2016 ! number of el. which must be treated next
2017 real veldel ! direction of the velocity
2018 real*8 pntdel ! point
2019
2020 real zdel, edel ! charge of current electrons
2021 ! which must be produced and energy of Delta
2022 integer Stdel ! Generation number
2023 integer Ptdel ! pointer to parent virtual photon
2024 integer updel ! additional parameters
2025 integer SOdel ! 1 for ouger electrons 0 for other
2026 integer nVoldel ! Number of volume
2027 real*8 rangedel ! range
2028 real*8 rangepdel ! practical range
2029 integer qstepdel ! quantity of steps of simulation
2030 ! of stopping
2031 integer sOverflowDel ! sign of overflow in the current event
2032 integer qsOverflowDel ! quantity of the overflows in all events
2033 integer qOverflowDel ! quantity of the lossed electrons
2034 ! in all events
2035 integer ii1del ! not used. only for alingment.
2036 common / comdel /
2037 + qdel, ii1del,
2038 + pntdel(3,pqdel), veldel(3,pqdel),
2039 + rangedel(pqdel),rangepdel(pqdel), qstepdel(pqdel),
2040 + zdel(pqdel), edel(pqdel), nVoldel(pqdel),
2041 + Stdel(pqdel), Ptdel(pqdel), updel(pqup,pqdel), SOdel(pqdel),
2042 + sOverflowDel, qsOverflowDel,qOverflowDel
2043 save / comdel /
2044
2045 +KEEP,cel.
2046 c Conductin electrons in sensitive volumes
2047 c Currently each the electron is considered as cluster
2048
2049 integer pqcel ! Max. q of clusters
2050 parameter (pqcel=5000)
2051 c parameter (pqcel=1000000) ! If this, reduce numbers of volumes
2052 c parameter (pqcel=100000) ! If this, reduce numbers of volumes
2053 integer qcel ! Q. of clusters
2054 real*8 pntcel ! point of cluster
2055 real zcel ! charge in unit of quantity of electron
2056 ! in this cluster (now it is always 1)
2057 real szcel ! sum quantity of charge in the volume
2058 integer Ndelcel ! number of parent delta electron
2059 integer sOverflowCel ! sign of overflow in the current event
2060 integer qsOverflowCel ! quantity of the overflows in all events
2061 integer qOverflowCel ! quantity of the lossed electrons
2062 ! in all events
2063 integer sactcel ! auxiliary sing.
2064 ! It set to one if the delta-electron either
2065 ! was born in an insensitive lawer or
2066 ! after it had flied through an insensitive lawer.
2067 common / comcel /
2068 + pntcel(3,pqcel,pQSVol),
2069 + qcel(pQSVol),
2070 + zcel(pqcel,pQSVol),
2071 + szcel(pQSVol),
2072 + Ndelcel(pqcel,pQSVol),
2073 + sactcel(pqcel,pQSVol),
2074 + sOverflowCel(pQSVol), qsOverflowCel(pQSVol),qOverflowCel(pQSVol)
2075 save / comcel /
2076 +KEEP,lsgvga.
2077 c Results of ionization loss calculations
2078 c It is used only for hist filling
2079
2080 integer pqgvga
2081 parameter (pqgvga=1000)
2082 integer qgvga,ganumat,ganumshl
2083 real esgvga,egvga,velgvga
2084 real*8 pntgvga
2085 common / clsgva /
2086 + qgvga(pQIVol),
2087 + esgvga(pQIVol),
2088 + egvga(pqgvga,pQIVol),
2089 + pntgvga(3,pqgvga,pQIVol),
2090 + velgvga(3,pqgvga,pQIVol),
2091 + ganumat(pqgvga,pQIVol),
2092 + ganumshl(pqgvga,pQIVol)
2093 save / clsgva /
2094 +KEEP,abs.
2095
2096 c Gamma which is ready to absorb
2097 c There are two sorts of gamma
2098 c Real gamma after their absorbtion points are known and
2099 c virtual gamma from ionization loss
2100 integer pqtagam ! Max quantity of absorbtion gamma
2101 parameter (pqtagam=100000)
2102 integer qtagam, ctagam ! Full quantity and current number
2103 ! of gamma which will be treat next.
2104 ! If ctagam>qtagam then
2105 ! there is no gamma to treat.
2106 real etagam, vtagam ! Energy, and velocity
2107 ! direction of absorbtion gamma
2108 real*8 rtagam ! position of absorbtion gamma
2109 integer nVolagam ! Volume number for this point
2110 integer nAtagam,nshlagam ! Number of atom and shell
2111 ! which absorbe this photon
2112 integer Stagam ! Generation number
2113 integer upagam ! additional parameters
2114 integer sOverflowagam ! sign of overflow in the current event
2115 integer qsOverflowagam ! quantity of the overflows in all events
2116 integer qOverflowagam ! quantity of the lossed electrons
2117 ! in all events
2118
2119 common / comabs /
2120 + qtagam, ctagam, etagam(pqtagam),
2121 + rtagam(3,pqtagam), vtagam(3,pqtagam),
2122 + nVolagam(pqtagam),nAtagam(pqtagam),nShlagam(pqtagam),
2123 + Stagam(pqtagam), upagam(pqup,pqtagam),
2124 + sOverflowagam, qsOverflowagam,qOverflowagam
2125 save / comabs /
2126 +KEEP,rga.
2127 c Real photons
2128
2129 integer pqrga
2130 parameter (pqrga=1000)
2131 integer qrga, crga
2132 real velrga, erga
2133 real*8 pntrga
2134 integer Strga ! generation
2135 integer Ptrga ! pointer to parent
2136 integer uprga ! number of trans vol
2137 integer SFrga ! sign of fly out
2138 integer nVolrga
2139 integer sOverflowrga ! sign of overflow in the current event
2140 integer qsOverflowrga ! quantity of the overflows in all events
2141 integer qOverflowrga ! quantity of the lossed photons
2142 ! in all events
2143
2144 common / comrga /
2145 + qrga, crga,
2146 + pntrga(3,pqrga), velrga(3,pqrga), erga(pqrga),
2147 + nVolrga(pqrga), Strga(pqrga), Ptrga(pqrga), uprga(pqup,pqrga),
2148 + SFrga(pqrga),
2149 + sOverflowrga, qsOverflowrga,qOverflowrga
2150 save / comrga /
2151 +KEEP,h1.
2152 integer qhis ! Quantity of the divisions in
2153 ! the additional histograms
2154 ! with numbers started from 30000
2155 parameter (qhis=500)
2156 real hhis ! step by coordinate
2157 real mhis ! maximal coordinate shift
2158 parameter (mhis=200.0)
2159 integer pqamp ! maximal quantity of the amplitude cuts
2160 parameter (pqamp=11)
2161 integer qamp ! real quantity of the amplitude cuts
2162 real amp
2163 real ampc ! values of the amplitude cuts
2164 integer npp ! number of events passed through cuts
2165
2166 ! The following two arrays:
2167 ! During event processing
2168 ! pp1 - sum of the coordinates of the centers
2169 ! pp2 - sum of the square of
2170 ! the coordinates of the centers
2171 ! After the last event processed
2172 ! they become:
2173 ! pp1 - mean coordinate
2174 ! pp2 - mean square deviation
2175 real*8 pp1
2176 real*8 pp2
2177 ! The following two arrays are filled after
2178 ! the last event processed and they have the same
2179 ! meaning, but different type.
2180 ! They are intended for filling of histograms
2181 real rpp1
2182 real rpp2
2183 real prob ! probability of the clusters
2184 real meanprob ! mean number of ionization
2185 real meanvga ! mean number of the energy transfers
2186 real meanvgal ! mean energy loss, KeV
2187 integer qe
2188 common / h31 /
2189 + pp1(1000,2,pqamp), pp2(1000,2,pqamp),hhis, npp(1000,2,pqamp),
2190 + rpp1(1000,2,pqamp), rpp2(1000,2,pqamp),
2191 + amp(pqamp),ampc(pqamp),qamp,
2192 + prob(1000),meanprob,meanvga,meanvgal,
2193 + qe
2194 +KEEP,shl.
2195 integer pqschl,pqshl,pqatm,pqsel,pqsga
2196 parameter (pqschl=3) ! Max. q. of channels
2197 parameter (pqshl=7) ! Max. q. of shells
2198 parameter (pqatm=20) ! Max. q. of atoms
2199 parameter (pqsel=3) ! Max. q. of secondary electrons in
2200 ! one channel
2201 parameter (pqsga=3) ! Max. q. of secondary photons in
2202 ! one channel
2203 integer qschl,qshl,qatm,qsel,qsga
2204 real charge ! charge of atom
2205 real eshell ! energy of shells
2206 ! The distanse must be bigger the
2207 ! threshold in the atom.inc
2208 ! if secondary photons is generated
2209 real secprobch ! Probubility function for channels
2210 ! Attention!!! - Probubility function
2211 ! i.e. last channel prob must be 1
2212 real secenel ! Energies of secondary electrons
2213 real secenga ! Energies of secondary photons
2214 common / comshl /
2215 + charge(pqatm),
2216 + qschl(pqshl,pqatm),qshl(pqatm),qatm,
2217 + qsel(pqschl,pqshl,pqatm),qsga(pqschl,pqshl,pqatm),
2218 + eshell(pqshl,pqatm),secprobch(pqschl,pqshl,pqatm),
2219 + secenel(pqsel,pqschl,pqshl,pqatm),
2220 + secenga(pqsga,pqschl,pqshl,pqatm)
2221 save / comshl /
2222 +KEEP,LibAtMat.
2223 c Numbers(pointers) of atoms in atom.inc.
2224
2225 c Since for some of them a special treatment is provided
2226 c in subroutine Iniatom and this subroutine recognize them by number,
2227 c the user must not initialize another atoms on these places,
2228 c even if subroutine AtomsByDefault is not called.
2229 c Another atoms can be initialized on free places.
2230
2231 integer num_H
2232 integer num_H3
2233 integer num_H4
2234 integer num_He
2235 integer num_Li
2236 integer num_C
2237 integer num_C1
2238 integer num_C2
2239 integer num_C3
2240 c integer num_C4
2241 integer num_N
2242 integer num_O
2243 integer num_F
2244 integer num_Ne
2245 integer num_Al
2246 integer num_Si
2247 integer num_Ar
2248 integer num_Kr
2249 integer num_Xe
2250 parameter (num_H = 1 )
2251 parameter (num_H3 = 2 )
2252 parameter (num_H4 = 3 )
2253 parameter (num_He = 4 )
2254 parameter (num_Li = 5 )
2255 parameter (num_C = 6 )
2256 parameter (num_N = 7 )
2257 parameter (num_O = 8 )
2258 parameter (num_F = 9 )
2259 parameter (num_Ne =10 )
2260 parameter (num_Al = 11 )
2261 parameter (num_Si = 12 )
2262 parameter (num_Ar = 13 )
2263 parameter (num_Kr = 14 )
2264 parameter (num_Xe = 15 )
2265 parameter (num_C1 = 16 ) ! C in CO2
2266 parameter (num_C2 = 17 ) ! C in CF4
2267 parameter (num_C3 = 18 ) ! C in CH4
2268 *** Additions (RV 20/9/99).
2269 integer num_S
2270 parameter (num_S = 19)
2271 *** End of additions.
2272 +KEEP,shellfi.
2273 integer pqash ! Max. q. of shells
2274 parameter (pqash=7)
2275 integer zato ! Z of atom
2276 integer qash ! quantity of shells
2277 real athreshold,aweight ! threshold and weight of shells
2278 integer pqaener,qaener ! Max. and just q. of shell energy
2279 parameter (pqaener=500)
2280 real aener ! Energy
2281 real aphot ! Photoabsorbtion crossection
2282 ! for this point of energy
2283 common / cshellfi /
2284 + zato,
2285 + qash,
2286 + athreshold(pqash),aweight(pqash),
2287 + qaener(pqash),
2288 + aener(pqaener,pqash),aphot(pqaener,pqash)
2289 save / cshellfi /
2290 +KEEP,tpasc.
2291 integer pqshPas
2292 parameter (pqshPas=5)
2293 integer qshPas
2294 integer lPas
2295 real E0Pas,EthPas,ywPas,yaPas,PPas,sigma0Pas
2296 common / Pascom /
2297 + qshPas(pQAt),
2298 + lPas(pqshPas,pQAt),
2299 + E0Pas(pqshPas,pQAt),EthPas(pqshPas,pQAt),ywPas(pqshPas,pQAt),
2300 + yaPas(pqshPas,pQAt),PPas(pqshPas,pQAt),sigma0Pas(pqshPas,pQAt)
2301 save / Pascom /
2302
2303
2304 +KEEP,henke6.
2305 qash=2
2306
2307 qaener(1)=10
2308 athreshold(1)=291
2309 aener(1,1)=311.7
2310 aphot(1,1)=0.839895
2311 aener(2,1)=392.4
2312 aphot(2,1)=0.49875
2313 aener(3,1)=452.2
2314 aphot(3,1)=0.35112
2315 aener(4,1)=676.8
2316 aphot(4,1)=0.127082
2317 aener(5,1)=776.2
2318 aphot(5,1)=0.0887775
2319 aener(6,1)=1011.7
2320 aphot(6,1)=0.0428925
2321 aener(7,1)=2984.3
2322 aphot(7,1)=0.00183341
2323 aener(8,1)=5414.7
2324 aphot(8,1)=0.000293265
2325 aener(9,1)=9886.4
2326 aphot(9,1)=4.2693e-05
2327 aener(10,1)=29779
2328 aphot(10,1)=1.04339e-06
2329
2330 qaener(2)=13
2331 athreshold(2)=8.9
2332 aener(1,2)=10.2
2333 aphot(1,2)=5.9052
2334 aener(2,2)=13
2335 aphot(2,2)=11.97
2336 aener(3,2)=15
2337 aphot(3,2)=13.965
2338 aener(4,2)=21.2
2339 aphot(4,2)=12.0299
2340 aener(5,2)=30.5
2341 aphot(5,2)=6.00495
2342 aener(6,2)=49.3
2343 aphot(6,2)=2.0349
2344 aener(7,2)=72.4
2345 aphot(7,2)=0.96558
2346 aener(8,2)=108.5
2347 aphot(8,2)=0.408975
2348 aener(9,2)=114
2349 aphot(9,2)=0.369075
2350 aener(10,2)=132.8
2351 aphot(10,2)=0.265335
2352 aener(11,2)=192.6
2353 aphot(11,2)=0.112119
2354 aener(12,2)=220.1
2355 aphot(12,2)=0.0776055
2356 aener(13,2)=277
2357 aphot(13,2)=0.039102
2358 +KEEP,track.
2359 c The track information about the primary particle
2360
2361 integer sign_ang ! sign to run the part. with effective angle
2362 real ang ! teta
2363 real phiang ! phi
2364 real ystart ! start Y coordinate
2365 integer srandtrack ! sign to randomize the Y coordinate
2366 ! between ystart1 and ystart2
2367 ! It is done by call IniNTrack from GoEvent
2368 ! if the track initialization was done by
2369 ! call IniRTrack
2370 real ystart1
2371 real ystart2
2372 real sigmaang ! sigma of begin angle distribution
2373 !Currently, if sigmaang>0, the rundomization
2374 ! is doing around the 0 angle.
2375 ! So the values of pang and pphiang are ignored
2376 ! It can be changed by modernization
2377 ! of IniNTrack
2378 real e1ang,e2ang,e3ang ! coordinates of new orts in the old
2379 integer sigmtk ! sign of multiple scatering
2380 integer pQmtk ! max. quantity of the break point of the track
2381 ! plus one
2382 parameter (pQmtk=10000)
2383 integer Qmtk ! actual quantity for current event
2384 real*8 pntmtk ! break point coordinates
2385 real velmtk ! directions of velocity
2386 real*8 lenmtk ! lengt of way for straight till next break
2387 real Tetamtk ! turn angle
2388 integer nVolmtk ! number of volume for given point,
2389 ! the point on the frantier is correspond
2390 ! to next volume of zero for end.
2391 real*8 vlenmtk ! lengt of way inside the volume
2392 integer nmtkvol1,nmtkvol2 ! numbers of first point in volume
2393 ! and the previous for end point
2394 real*8 xdvmtk,ydvmtk ! deviations from strate line
2395 ! using only for histograms
2396
2397 ! service data. They are using at initialization of the track.
2398 integer sruthmtk ! key to use Rutherford cross section
2399 integer nmtk ! current number of point.
2400 ! After initialization it must be equal to Qmtk+1
2401 integer sgnmtk ! sign to go to next volume
2402 integer sturnmtk ! sign to turn
2403 real*8 lammtk ! mean free path
2404 real mlammtk ! minimum mean lengt of range
2405 ! multiplied by density. sm*gr/sm**3 = gr/sm**2
2406 real mTetacmtk ! minimum threshold turn angle
2407 real Tetacmtk ! threshold turn angle
2408 real rTetacmtk ! restiction due to atomic shell
2409 real*8 CosTetac12mtk ! cos(tetac/2)
2410 real*8 SinTetac12mtk ! sin(tetac/2)
2411 c real CosTetac12mtk ! cos(tetac/2)
2412 c real SinTetac12mtk ! sin(tetac/2)
2413 real msigmtk ! msig without sqrt(x)
2414 real e1mtk,e2mtk,e3mtk
2415 common / ctrack /
2416 + sign_ang, ang, phiang, ystart, srandtrack, ystart1, ystart2,
2417 + e1ang(3),e2ang(3),e3ang(3),
2418 + sigmtk,
2419 + sruthmtk,
2420 + Qmtk, nmtk,
2421 + pntmtk(3,pQmtk), velmtk(3,pQmtk), lenmtk(pQmtk), Tetamtk(pQmtk),
2422 + nVolmtk(pQmtk), vlenmtk(pQVol),
2423 + nmtkvol1(pQVol), nmtkvol2(pQVol),
2424 + xdvmtk(pQSVol),ydvmtk(pQSVol),
2425 + sgnmtk, sturnmtk,
2426 + lammtk(pQMat), mlammtk, mTetacmtk,
2427 + Tetacmtk(pQMat),
2428 + rTetacmtk(pQMat),
2429 + CosTetac12mtk(pQMat), SinTetac12mtk(pQMat), msigmtk,
2430 + e1mtk(3,pQmtk),e2mtk(3,pQmtk),e3mtk(3,pQmtk),
2431 + sigmaang
2432 save / ctrack /
2433 +KEEP,raffle.
2434 integer pQGRaf ! Max. quantity of energy transfer
2435 parameter (pQGRaf=10000)
2436 integer QGRaf ! Quantity of energy transfers
2437 integer NAtGRaf,NShAtGRaf ! Numbers of atom and shell
2438 real ESGRaf,EGRaf ! Cumulative energy and just energy
2439 real pntraf,velraf
2440
2441 common / craffle /
2442 + QGRaf,
2443 + ESGRaf,
2444 + EGRaf(pQGRaf),
2445 + NAtGRaf(pQGRaf),
2446 + NShAtGRaf(pQGRaf) ,
2447 + pntraf(3,pQGRaf), velraf(3,pQGRaf)
2448
2449
2450 save / craffle /
2451 +KEEP,bdel.
2452 c Information about tracing of current delta-electron
2453 c
2454
2455 real eMinBdel ! some condition step by energy
2456 ! (the name is obsolete)
2457 ! If step is larger than eMinBdel and 0.1*eBdel
2458 ! the step is equate to 0.1*eBdel
2459 ! In this case step can not be less than eMinBdel
2460 ! and larger than eBdel
2461 integer iMinBdel ! not using now
2462 real eLossBdel ! array with energy loss for
2463 ! all the matters
2464 real betaBdel
2465 real beta2Bdel
2466 real momentumBdel
2467 real momentum2Bdel
2468 real*8 lamaBdel
2469 real msigBdel
2470 integer nBdel ! number of the delta-electron
2471 ! in the del.inc, which is
2472 ! traced now
2473 real eBdel ! the current energy
2474 real*8 pntBdel,npntBdel ! current point and next point
2475 ! Next is calc. in
2476 ! subroutine SstepBdel
2477 ! and moved to current in
2478 ! subroutine treatdel
2479 real*8 stepBdel ! step - sm
2480 real estepBdel ! and MeV
2481 real velBdel ! direction of the velocity
2482 real e1Bdel, e2Bdel, e3Bdel ! coordinate axises,
2483 ! e3Bdel is along to velocity
2484 ! e2Bdel is perpend. to e3Bdel and x
2485 ! e1Bdel is perpend to e2Bdel and e3Bdel
2486 integer nVolBdel,sgonextBdel ! number of current volume
2487 ! and sign to go to next volume
2488 integer sturnBdel ! sign of turn
2489 real TetacBdel,TetaBdel ! threshold turn angle and
2490 ! actual angle
2491 real CosTetac12Bdel,SinTetac12Bdel
2492 real rTetacBdel ! restiction due to atomic shell
2493 real*8 lamBdel ! mean lengt of range
2494 real mlamBdel ! minimum mean lengt of range
2495 ! multiplied by density. sm*gr/sm**3 = gr/sm**2
2496 real mTetacBdel ! minimum threshold turn angle
2497 ! For Rutherford:
2498 ! The interactions with less angle will not take
2499 ! into account. The actual threshold angle can be
2500 ! larger. The second restriction is going
2501 ! from restriction of atomic shell.
2502 ! The third one is from mlamBdel.
2503 ! For usial multiple scatering:
2504 ! Assuming that sigma = mTetacBdel
2505 ! the paht lengt is calculating.
2506 ! If mlamBdel/density is less then the last is using.
2507 integer iBdel ! index of current energy
2508 ! in the enerc array
2509 integer StBdel ! Origin and generation sign
2510 ! <10000 - origin is ionization loss
2511 ! >=10000 - origin is transition radiation
2512 ! 1 or 10000 first generation
2513 ! 2 or 10001 second generation
2514 ! 3 or 10002 third, et al.
2515 integer NtvBdel ! Only for transition gammas:
2516 ! number of transition volume, where it was born
2517 integer SOBdel ! 1 for ouger electrons 0 for other
2518
2519 real*8 rangBdel ! whole delta-electron range
2520 real*8 rangpBdel ! mean projection of delta-electron range
2521 ! The maximum projection lengt of
2522 ! current electron point on the
2523 ! primary velocity.
2524 integer sruthBdel ! sign of use
2525 ! 1 - Rutherford cross-section
2526 ! 0 - usial multiple scatering formula
2527 integer sisferBdel ! sign that the mean or the cut turn angle
2528 ! is so big that there are no sense to turn
2529 ! the particle. Insterd that the sferical simmetric
2530 ! velocity is genegating. It is much more faster.
2531 integer sisferaBdel
2532 real cuteneBdel
2533 integer nstepBdel
2534 parameter (cuteneBdel=1.0e-3)
2535 common / cbdel /
2536 + lamaBdel(pqener,pQMat),
2537 + pntBdel(3),npntBdel(3),
2538 + stepBdel, lamBdel,
2539 + rangBdel,rangpBdel,
2540 + eMinBdel, iMinBdel,
2541 + eLossBdel(pqener,pQMat),
2542 + betaBdel(pqener), beta2Bdel(pqener),
2543 + momentumBdel(pqener), momentum2Bdel(pqener),
2544 + msigBdel(pqener),
2545 + rTetacBdel(pqener,pQMat),
2546 + nBdel,eBdel,
2547 + estepBdel,
2548 + velBdel(3),
2549 + e1Bdel(3),e2Bdel(3),e3Bdel(3),
2550 + nVolBdel,sgonextBdel,sturnBdel,
2551 + TetacBdel(pqener,pQMat),
2552 + CosTetac12Bdel(pqener,pQMat),
2553 + SinTetac12Bdel(pqener,pQMat),
2554 + TetaBdel,
2555 + mlamBdel,mTetacBdel,
2556 + iBdel,
2557 + StBdel,NtvBdel,SOBdel,
2558 + sruthBdel,
2559 + sisferBdel,
2560 + sisferaBdel(pqener,pQMat),
2561 + nstepBdel
2562 save / cbdel /
2563
2564 c below there are the values for exact elastic
2565 c scatering
2566 integer pqanCBdel
2567 parameter (pqanCBdel=31)
2568 integer qanCBdel
2569 parameter (qanCBdel=30)
2570 real anCBdel
2571 real ancCBdel
2572
2573 integer pqeaCBdel
2574 parameter (pqeaCBdel=10)
2575 integer qeaCBdel
2576 parameter (qeaCBdel=9)
2577 real enerCBdel, enercCBdel
2578 real sign_ACBdel ! sign that the parameters are read
2579 real ACBdel ! parameters
2580 real CCBdel
2581 real BCBdel
2582 real sCBdel ! cross section, Angstrem**2 / strd
2583 real sRCBdel ! Rutherford cross section for comparison
2584 real sRmCBdel ! maximum of Rutherford die to cut
2585 real sRcmCBdel ! the cut angle again
2586 real smaCBdel ! cross section for material per one av. atom,
2587 ! in MeV**-2/rad
2588 real smatCBdel ! cross section for material per one av. atom,
2589 ! in MeV**-2/rad, for working energy mesh
2590 real ismatCBdel ! normalized integral
2591 real tsmatCBdel ! integral
2592 real gammaCBdel
2593 real beta2CBdel
2594 real momentum2CBdel
2595 real rrCBdel ! range by usual formula
2596 real koefredCBdel ! koef for derivation of step
2597 ! from usual formula
2598 parameter (koefredCBdel=0.02)
2599 common / cbdel1 /
2600 + anCBdel(pqanCBdel), ancCBdel(pqanCBdel),
2601 + enerCBdel(pqeaCBdel), enercCBdel(pqeaCBdel),
2602 + sign_ACBdel(pqAt),
2603 + ACBdel(4,pqeaCBdel,pqAt), CCBdel(0:6,pqeaCBdel,pqAt),
2604 + BCBdel(pqeaCBdel,pqAt),
2605 + sCBdel(pqanCBdel,pqeaCBdel,pqAt),
2606 + sRCBdel(pqanCBdel,pqeaCBdel,pqAt),
2607 + sRmCBdel(pqeaCBdel,pqAt),
2608 + sRcmCBdel(pqeaCBdel,pqAt),
2609 + smaCBdel(pqanCBdel,pqeaCBdel,pQMat),
2610 + smatCBdel(pqanCBdel,pqener,pQMat),
2611 + ismatCBdel(pqanCBdel,pqener,pQMat),
2612 + tsmatCBdel(pqener,pQMat),
2613 + gammaCBdel(pqeaCBdel), beta2CBdel(pqeaCBdel),
2614 + momentum2CBdel(pqeaCBdel),
2615 + rrCBdel(pqener,pQMat)
2616 save / cbdel1 /
2617
2618 real MagForFBdel
2619 real EleForFBdel
2620 real veloBdel
2621 common / cbdel2 /
2622 + MagForFBdel(3), EleForFBdel(3),
2623 + veloBdel(3)
2624 save / cbdel2 /
2625
2626
2627
2628
2629 +KEEP,cbdeldat.
2630 data ZsCBdel(1)/ 1 /
2631 data (AsCBdel( 1 , i, 1 ),i=1,9)/
2632 + -0.9007, -0.6539, -0.3655, -0.5499, -0.0196,
2633 + 0.04526, -0.658, 0.008393, -0.3739 /
2634 data (AsCBdel( 2 , i, 1 ),i=1,9)/
2635 + 0.3975, 0.338, 0.2884, 0.3151, 0.2809,
2636 + 0.2774, 0.3126, 0.2787, 0.2928 /
2637 data (AsCBdel( 3 , i, 1 ),i=1,9)/
2638 + 0.002344, 0.003208, 0.00294, 0.001429, 0.0009329,
2639 + 0.00041, 3.017e-05, 0.0001038, 1.757e-05 /
2640 data (AsCBdel( 4 , i, 1 ),i=1,9)/
2641 + -3.534e-05, -1.59e-05, -5.392e-06, 9.522e-06, 8.538e-07,
2642 + -4.278e-08, 7.506e-07, 4.492e-09, 3.551e-08 /
2643 data (CsCBdel( 0 , i, 1 ),i=1,9)/
2644 + 1.105, 0.8986, 0.6487, 0.8062, 0.01901,
2645 + -0.09682, 0.9669, -0.1011, 0.4769 /
2646 data (CsCBdel( 1 , i, 1 ),i=1,9)/
2647 + 1.172, 1.05, 0.9256, 0.9955, 0.02643,
2648 + -0.1263, 1.229, -0.141, 0.6287 /
2649 data (CsCBdel( 2 , i, 1 ),i=1,9)/
2650 + 0.7611, 0.7519, 0.8045, 0.751, 0.02258,
2651 + -0.1017, 0.9513, -0.1224, 0.5042 /
2652 data (CsCBdel( 3 , i, 1 ),i=1,9)/
2653 + 0.4001, 0.4377, 0.5676, 0.4597, 0.01605,
2654 + -0.06736, 0.5969, -0.08834, 0.3282 /
2655 data (CsCBdel( 4 , i, 1 ),i=1,9)/
2656 + 0.1718, 0.2092, 0.3277, 0.2304, 0.009861,
2657 + -0.03748, 0.3072, -0.05421, 0.176 /
2658 data (CsCBdel( 5 , i, 1 ),i=1,9)/
2659 + 0.05558, 0.07568, 0.1426, 0.08723, 0.004891,
2660 + -0.0164, 0.1202, -0.02652, 0.07261 /
2661 data (CsCBdel( 6 , i, 1 ),i=1,9)/
2662 + 0.01031, 0.01571, 0.03491, 0.01878, 0.00171,
2663 + -0.004697, 0.02774, -0.008267, 0.0182 /
2664 data (BsCBdel( i, 1 ),i=1,9)/
2665 + 0.008057, 0.004506, 0.002592, 0.001872, 0.0008431,
2666 + 0.0003444, 0.0003049, 8.926e-05, 6.648e-05 /
2667 data ZsCBdel(2)/ 2 /
2668 data (AsCBdel( 1 , i, 2 ),i=1,9)/
2669 + 0.0327, -0.4242, -0.6746, -0.6343, -0.2289,
2670 + -0.3277, -0.2001, -1.227, -0.3022 /
2671 data (AsCBdel( 2 , i, 2 ),i=1,9)/
2672 + 0.3427, 0.3746, 0.363, 0.3388, 0.2998,
2673 + 0.298, 0.2891, 0.3407, 0.2914 /
2674 data (AsCBdel( 3 , i, 2 ),i=1,9)/
2675 + -0.00727, -0.002397, -0.001851, -0.0009558, 0.001271,
2676 + 0.0006719, 0.000343, -9.27e-05, 7.883e-05 /
2677 data (AsCBdel( 4 , i, 2 ),i=1,9)/
2678 + 5.556e-05, 2.941e-06, 3.477e-06, 9.459e-07, 1.384e-11,
2679 + 1.73e-07, -7.566e-14, 6.887e-07, 4.899e-08 /
2680 data (CsCBdel( 0 , i, 2 ),i=1,9)/
2681 + -0.09725, 0.4519, 0.8681, 0.8734, 0.3088,
2682 + 0.4817, 0.2759, 1.81, 0.3546 /
2683 data (CsCBdel( 1 , i, 2 ),i=1,9)/
2684 + -0.1434, 0.4205, 0.9635, 1.028, 0.3654,
2685 + 0.6172, 0.3678, 2.294, 0.4574 /
2686 data (CsCBdel( 2 , i, 2 ),i=1,9)/
2687 + -0.1141, 0.2335, 0.6551, 0.7411, 0.2638,
2688 + 0.4836, 0.3015, 1.763, 0.3535 /
2689 data (CsCBdel( 3 , i, 2 ),i=1,9)/
2690 + -0.06887, 0.1, 0.3606, 0.4342, 0.1544,
2691 + 0.3089, 0.2039, 1.09, 0.2158 /
2692 data (CsCBdel( 4 , i, 2 ),i=1,9)/
2693 + -0.03233, 0.03143, 0.1606, 0.2074, 0.07401,
2694 + 0.1633, 0.1164, 0.5456, 0.1024 /
2695 data (CsCBdel( 5 , i, 2 ),i=1,9)/
2696 + -0.01082, 0.00537, 0.05227, 0.0725, 0.0269,
2697 + 0.0664, 0.05306, 0.2027, 0.0328 /
2698 data (CsCBdel( 6 , i, 2 ),i=1,9)/
2699 + -0.00182, -0.000404, 0.008547, 0.01166, 0.005736,
2700 + 0.01634, 0.01557, 0.04167, 0.006162 /
2701 data (BsCBdel( i, 2 ),i=1,9)/
2702 + 0.01206, 0.007727, 0.00318, 0.001359, 0.001657,
2703 + 0.0008551, 0.0004051, 0.0003179, 0.0001234 /
2704 data ZsCBdel(3)/ 3 /
2705 data (AsCBdel( 1 , i, 3 ),i=1,9)/
2706 + 1.427, 1.875, 1.99, 1.699, 1.07,
2707 + 0.6406, -0.4004, -0.3638, -1.191 /
2708 data (AsCBdel( 2 , i, 3 ),i=1,9)/
2709 + 0.05527, 0.09522, 0.1452, 0.1939, 0.2375,
2710 + 0.2604, 0.3007, 0.2984, 0.3292 /
2711 data (AsCBdel( 3 , i, 3 ),i=1,9)/
2712 + -0.0002502, -0.0006965, -0.0008232, -0.000703, -0.0005227,
2713 + -0.0003072, -0.0002339, -0.0001217, -0.0001381 /
2714 data (AsCBdel( 4 , i, 3 ),i=1,9)/
2715 + 2.705e-05, 1.05e-05, 4.396e-06, 1.701e-06, 6.296e-07,
2716 + 1.826e-07, 7.576e-08, 2.354e-08, 3.617e-08 /
2717 data (CsCBdel( 0 , i, 3 ),i=1,9)/
2718 + -1.541, -2.386, -2.805, -2.555, -1.683,
2719 + -1.062, 0.5774, 0.4788, 1.77 /
2720 data (CsCBdel( 1 , i, 3 ),i=1,9)/
2721 + -1.472, -2.601, -3.317, -3.176, -2.153,
2722 + -1.397, 0.7406, 0.6022, 2.303 /
2723 data (CsCBdel( 2 , i, 3 ),i=1,9)/
2724 + -0.8666, -1.737, -2.391, -2.401, -1.672,
2725 + -1.115, 0.5758, 0.4548, 1.815 /
2726 data (CsCBdel( 3 , i, 3 ),i=1,9)/
2727 + -0.4155, -0.9407, -1.395, -1.469, -1.047,
2728 + -0.718, 0.3605, 0.2727, 1.152 /
2729 data (CsCBdel( 4 , i, 3 ),i=1,9)/
2730 + -0.1638, -0.4176, -0.6643, -0.7343, -0.5343,
2731 + -0.3768, 0.1825, 0.1288, 0.5931 /
2732 data (CsCBdel( 5 , i, 3 ),i=1,9)/
2733 + -0.04905, -0.1403, -0.2385, -0.2776, -0.2048,
2734 + -0.1487, 0.06829, 0.04247, 0.2284 /
2735 data (CsCBdel( 6 , i, 3 ),i=1,9)/
2736 + -0.00851, -0.02708, -0.04885, -0.06059, -0.04461,
2737 + -0.03362, 0.01358, 0.006216, 0.05031 /
2738 data (BsCBdel( i, 3 ),i=1,9)/
2739 + 0.004125, 0.002188, 0.001189, 0.0006433, 0.000348,
2740 + 0.0001781, 9.893e-05, 5.406e-05, 5.406e-05 /
2741 data ZsCBdel(4)/ 6 /
2742 data (AsCBdel( 1 , i, 4 ),i=1,9)/
2743 + -0.2288, -0.158, -0.002296, 0.1188, -0.113,
2744 + -0.1099, -0.2114, -0.321, -0.3712 /
2745 data (AsCBdel( 2 , i, 4 ),i=1,9)/
2746 + 0.1755, 0.1774, 0.1813, 0.1927, 0.2573,
2747 + 0.2617, 0.2751, 0.2829, 0.286 /
2748 data (AsCBdel( 3 , i, 4 ),i=1,9)/
2749 + -0.000567, 0.001007, 0.0005522, -0.0002222, -0.0006304,
2750 + -0.0003796, -0.0002618, -0.0001435, -7.271e-05 /
2751 data (AsCBdel( 4 , i, 4 ),i=1,9)/
2752 + -2.822e-06, -6.323e-06, -1.751e-06, 8.23e-08, 7.391e-06,
2753 + 2.077e-06, 6.244e-07, 1.488e-07, 3.304e-08 /
2754 data (CsCBdel( 0 , i, 4 ),i=1,9)/
2755 + 0.5481, 0.5514, 0.4277, 0.2874, 0.4173,
2756 + 0.4084, 0.4764, 0.5723, 0.5971 /
2757 data (CsCBdel( 1 , i, 4 ),i=1,9)/
2758 + 0.7001, 0.8468, 0.8727, 0.8116, 0.7996,
2759 + 0.8204, 0.8368, 0.9077, 0.9267 /
2760 data (CsCBdel( 2 , i, 4 ),i=1,9)/
2761 + 0.5164, 0.6987, 0.8691, 0.9514, 0.8364,
2762 + 0.9003, 0.8566, 0.8596, 0.8603 /
2763 data (CsCBdel( 3 , i, 4 ),i=1,9)/
2764 + 0.3055, 0.4423, 0.6429, 0.7965, 0.6723,
2765 + 0.7587, 0.695, 0.6525, 0.6395 /
2766 data (CsCBdel( 4 , i, 4 ),i=1,9)/
2767 + 0.1493, 0.2224, 0.3722, 0.5125, 0.4275,
2768 + 0.5034, 0.4532, 0.3989, 0.381 /
2769 data (CsCBdel( 5 , i, 4 ),i=1,9)/
2770 + 0.05661, 0.08288, 0.1587, 0.2398, 0.2002,
2771 + 0.2435, 0.2194, 0.1783, 0.1645 /
2772 data (CsCBdel( 6 , i, 4 ),i=1,9)/
2773 + 0.01273, 0.01736, 0.03764, 0.06171, 0.05196,
2774 + 0.06335, 0.05949, 0.04171, 0.0395 /
2775 data (BsCBdel( i, 4 ),i=1,9)/
2776 + 0.005592, 0.003821, 0.0019, 0.0004467, 0.00118,
2777 + 0.0005983, 0.0003049, 0.0001453, 6.647e-05 /
2778 data ZsCBdel(5)/ 7 /
2779 data (AsCBdel( 1 , i, 5 ),i=1,9)/
2780 + -0.2683, -0.1095, -0.2076, 1.155, 1.192,
2781 + 1.083, 0.6177, 0.6945, 0.1072 /
2782 data (AsCBdel( 2 , i, 5 ),i=1,9)/
2783 + 0.1794, 0.1917, 0.2207, 0.1476, 0.1849,
2784 + 0.2177, 0.2517, 0.2517, 0.2784 /
2785 data (AsCBdel( 3 , i, 5 ),i=1,9)/
2786 + -0.002106, -0.001189, 0.001094, 0.001768, 0.0006366,
2787 + 0.0001047, -0.0001064, -1.845e-05, -5.791e-05 /
2788 data (AsCBdel( 4 , i, 5 ),i=1,9)/
2789 + 8.363e-06, 2.424e-06, 6.217e-05, 4.937e-07, 3.26e-06,
2790 + 1.638e-06, 7.072e-07, 8.12e-08, 4.488e-08 /
2791 data (CsCBdel( 0 , i, 5 ),i=1,9)/
2792 + 0.587, 0.3883, 0.5649, -1.409, -1.614,
2793 + -1.596, -0.9572, -1.143, -0.2718 /
2794 data (CsCBdel( 1 , i, 5 ),i=1,9)/
2795 + 0.7239, 0.5554, 0.865, -1.48, -1.836,
2796 + -1.934, -1.17, -1.441, -0.327 /
2797 data (CsCBdel( 2 , i, 5 ),i=1,9)/
2798 + 0.5231, 0.4279, 0.73, -0.9541, -1.274,
2799 + -1.429, -0.8647, -1.105, -0.2408 /
2800 data (CsCBdel( 3 , i, 5 ),i=1,9)/
2801 + 0.2991, 0.2539, 0.4765, -0.4998, -0.7137,
2802 + -0.8552, -0.5104, -0.6825, -0.1421 /
2803 data (CsCBdel( 4 , i, 5 ),i=1,9)/
2804 + 0.1378, 0.1199, 0.2486, -0.2148, -0.3255,
2805 + -0.419, -0.2401, -0.3423, -0.06744 /
2806 data (CsCBdel( 5 , i, 5 ),i=1,9)/
2807 + 0.0478, 0.04201, 0.09691, -0.06986, -0.1112,
2808 + -0.1557, -0.08076, -0.1293, -0.02457 /
2809 data (CsCBdel( 6 , i, 5 ),i=1,9)/
2810 + 0.00979, 0.008339, 0.02151, -0.01307, -0.02128,
2811 + -0.03377, -0.01323, -0.02937, -0.006507 /
2812 data (BsCBdel( i, 5 ),i=1,9)/
2813 + 0.005535, 0.002575, 0.005228, 0.002104, 0.00129,
2814 + 0.0007012, 0.0003761, 0.0001529, 8.43e-05 /
2815 data ZsCBdel(6)/ 8 /
2816 data (AsCBdel( 1 , i, 6 ),i=1,9)/
2817 + -0.3151, -0.4143, -0.3378, 0.775, 1.151,
2818 + 1.043, 0.8495, 0.6484, 0.6268 /
2819 data (AsCBdel( 2 , i, 6 ),i=1,9)/
2820 + 0.1565, 0.2123, 0.228, 0.1668, 0.1769,
2821 + 0.2119, 0.2388, 0.2526, 0.2555 /
2822 data (AsCBdel( 3 , i, 6 ),i=1,9)/
2823 + 0.005179, 0.0008074, 0.002091, 0.00213, 0.001118,
2824 + 0.0003669, 5.394e-05, 5.051e-06, 1.052e-05 /
2825 data (AsCBdel( 4 , i, 6 ),i=1,9)/
2826 + -7.102e-05, -1.079e-05, 5.928e-05, 6.685e-12, 7.192e-07,
2827 + 1.642e-06, 7.253e-07, 1.528e-07, 1.002e-08 /
2828 data (CsCBdel( 0 , i, 6 ),i=1,9)/
2829 + 0.6907, 0.8183, 0.7333, -0.8508, -1.514,
2830 + -1.489, -1.311, -1.053, -1.081 /
2831 data (CsCBdel( 1 , i, 6 ),i=1,9)/
2832 + 0.8607, 1.068, 1.04, -0.8104, -1.685,
2833 + -1.755, -1.622, -1.305, -1.363 /
2834 data (CsCBdel( 2 , i, 6 ),i=1,9)/
2835 + 0.6281, 0.8144, 0.8428, -0.4708, -1.148,
2836 + -1.259, -1.224, -0.9807, -1.045 /
2837 data (CsCBdel( 3 , i, 6 ),i=1,9)/
2838 + 0.3597, 0.4966, 0.5392, -0.2198, -0.6336,
2839 + -0.728, -0.7484, -0.5893, -0.6437 /
2840 data (CsCBdel( 4 , i, 6 ),i=1,9)/
2841 + 0.1652, 0.2472, 0.28, -0.08269, -0.2864,
2842 + -0.3417, -0.3747, -0.2827, -0.3206 /
2843 data (CsCBdel( 5 , i, 6 ),i=1,9)/
2844 + 0.05686, 0.09356, 0.11, -0.02291, -0.09803,
2845 + -0.1195, -0.1422, -0.09731, -0.1192 /
2846 data (CsCBdel( 6 , i, 6 ),i=1,9)/
2847 + 0.01108, 0.02049, 0.02459, -0.003431, -0.01939,
2848 + -0.02313, -0.03158, -0.01668, -0.02626 /
2849 data (BsCBdel( i, 6 ),i=1,9)/
2850 + 0.01527, 0.006677, 0.006234, 0.002632, 0.001398,
2851 + 0.0008426, 0.0004476, 0.0002062, 7.411e-05 /
2852 data ZsCBdel(7)/ 9 /
2853 data (AsCBdel( 1 , i, 7 ),i=1,9)/
2854 + -0.271, -0.1705, -0.4203, -0.08103, 0.847,
2855 + 1.032, 0.9064, 0.737, 0.7296 /
2856 data (AsCBdel( 2 , i, 7 ),i=1,9)/
2857 + 0.06297, 0.1982, 0.2525, 0.2293, 0.1892,
2858 + 0.2059, 0.2323, 0.247, 0.251 /
2859 data (AsCBdel( 3 , i, 7 ),i=1,9)/
2860 + 0.0192, -0.001907, 0.001649, -0.0005853, 0.001314,
2861 + 0.0006477, 0.0002021, 6.899e-05, 2.812e-05 /
2862 data (AsCBdel( 4 , i, 7 ),i=1,9)/
2863 + -1.458e-05, 6.353e-06, 0.0001059, 4.938e-07, 1.198e-13,
2864 + 1e-06, 7.184e-07, 1.568e-07, 3.663e-09 /
2865 data (CsCBdel( 0 , i, 7 ),i=1,9)/
2866 + 0.8256, 0.4602, 0.7589, 0.3443, -1.043,
2867 + -1.44, -1.373, -1.174, -1.261 /
2868 data (CsCBdel( 1 , i, 7 ),i=1,9)/
2869 + 1.154, 0.6192, 0.9765, 0.5852, -1.093,
2870 + -1.665, -1.676, -1.445, -1.601 /
2871 data (CsCBdel( 2 , i, 7 ),i=1,9)/
2872 + 0.92, 0.4733, 0.7312, 0.5192, -0.6998,
2873 + -1.174, -1.249, -1.08, -1.243 /
2874 data (CsCBdel( 3 , i, 7 ),i=1,9)/
2875 + 0.5763, 0.2837, 0.4353, 0.3475, -0.3624,
2876 + -0.6677, -0.7544, -0.6459, -0.7811 /
2877 data (CsCBdel( 4 , i, 7 ),i=1,9)/
2878 + 0.2949, 0.1363, 0.2107, 0.1826, -0.1537,
2879 + -0.3085, -0.3728, -0.309, -0.3993 /
2880 data (CsCBdel( 5 , i, 7 ),i=1,9)/
2881 + 0.1166, 0.04879, 0.07714, 0.07063, -0.04901,
2882 + -0.1063, -0.1396, -0.1066, -0.1488 /
2883 data (CsCBdel( 6 , i, 7 ),i=1,9)/
2884 + 0.0272, 0.009832, 0.01628, 0.01543, -0.009001,
2885 + -0.02032, -0.0305, -0.01865, -0.03074 /
2886 data (BsCBdel( i, 7 ),i=1,9)/
2887 + 0.02583, 0.004772, 0.007849, 0.001104, 0.001634,
2888 + 0.0009459, 0.0005241, 0.0002429, 7.913e-05 /
2889 data ZsCBdel(8)/ 13 /
2890 data (AsCBdel( 1 , i, 8 ),i=1,9)/
2891 + -0.4378, -0.3167, -0.2708, -0.212, -0.2487,
2892 + -0.2509, -0.234, -0.265, -0.2887 /
2893 data (AsCBdel( 2 , i, 8 ),i=1,9)/
2894 + 0.0923, 0.1454, 0.1968, 0.2238, 0.244,
2895 + 0.2547, 0.2598, 0.2632, 0.2677 /
2896 data (AsCBdel( 3 , i, 8 ),i=1,9)/
2897 + -0.001988, -0.003033, -0.00252, -0.001545, -0.0008717,
2898 + -0.0004561, -0.0002297, -0.0001108, -5.184e-05 /
2899 data (AsCBdel( 4 , i, 8 ),i=1,9)/
2900 + 3.912e-05, 3.749e-05, 1.642e-05, 5.325e-06, 1.526e-06,
2901 + 3.975e-07, 9.745e-08, 2.235e-08, 4.724e-09 /
2902 data (CsCBdel( 0 , i, 8 ),i=1,9)/
2903 + 0.9154, 0.7984, 0.7195, 0.6202, 0.6319,
2904 + 0.6121, 0.571, 0.5794, 0.5696 /
2905 data (CsCBdel( 1 , i, 8 ),i=1,9)/
2906 + 1.089, 1.079, 1.064, 1.001, 1.008,
2907 + 0.9975, 0.9718, 0.9775, 0.9695 /
2908 data (CsCBdel( 2 , i, 8 ),i=1,9)/
2909 + 0.8455, 0.8439, 0.8883, 0.9071, 0.9025,
2910 + 0.9105, 0.9213, 0.9188, 0.9192 /
2911 data (CsCBdel( 3 , i, 8 ),i=1,9)/
2912 + 0.5493, 0.5267, 0.5759, 0.645, 0.6283,
2913 + 0.6424, 0.6721, 0.6653, 0.6698 /
2914 data (CsCBdel( 4 , i, 8 ),i=1,9)/
2915 + 0.3033, 0.2718, 0.2962, 0.3698, 0.3493,
2916 + 0.3588, 0.3856, 0.3802, 0.3813 /
2917 data (CsCBdel( 5 , i, 8 ),i=1,9)/
2918 + 0.1342, 0.1092, 0.1121, 0.1589, 0.1442,
2919 + 0.1474, 0.1612, 0.1593, 0.1552 /
2920 data (CsCBdel( 6 , i, 8 ),i=1,9)/
2921 + 0.03585, 0.02589, 0.02376, 0.03845, 0.03347,
2922 + 0.03359, 0.0368, 0.03715, 0.03315 /
2923 data (BsCBdel( i, 8 ),i=1,9)/
2924 + 0.006753, 0.004403, 0.002434, 0.001282, 0.0006546,
2925 + 0.0003271, 0.0001599, 7.58e-05, 3.417e-05 /
2926 data ZsCBdel(9)/ 14 /
2927 data (AsCBdel( 1 , i, 9 ),i=1,9)/
2928 + -0.482, -0.3436, 1.032, 1.099, -0.2834,
2929 + 0.7271, 0.4975, -0.3009, -0.3203 /
2930 data (AsCBdel( 2 , i, 9 ),i=1,9)/
2931 + 0.1315, 0.1377, 0.1022, 0.1591, 0.2496,
2932 + 0.2229, 0.2438, 0.2875, 0.2946 /
2933 data (AsCBdel( 3 , i, 9 ),i=1,9)/
2934 + -0.005324, -0.002923, -0.0008502, -0.000928, -0.001066,
2935 + -0.0003526, -0.000212, -0.0002344, -0.0001483 /
2936 data (AsCBdel( 4 , i, 9 ),i=1,9)/
2937 + 0.0001555, 4.879e-05, 9.499e-06, 4.498e-06, 2.597e-06,
2938 + 3.532e-07, 1.095e-07, 1.34e-07, 5.275e-08 /
2939 data (CsCBdel( 0 , i, 9 ),i=1,9)/
2940 + 0.7947, 0.8286, -1.163, -1.429, 0.6795,
2941 + -1.002, -0.6834, 0.5116, 0.4764 /
2942 data (CsCBdel( 1 , i, 9 ),i=1,9)/
2943 + 0.7724, 1.09, -1.231, -1.651, 1.068,
2944 + -1.165, -0.7525, 0.7734, 0.7112 /
2945 data (CsCBdel( 2 , i, 9 ),i=1,9)/
2946 + 0.5181, 0.8414, -0.8242, -1.192, 0.9573,
2947 + -0.8474, -0.5102, 0.6779, 0.6173 /
2948 data (CsCBdel( 3 , i, 9 ),i=1,9)/
2949 + 0.2907, 0.5252, -0.4605, -0.7067, 0.6767,
2950 + -0.5094, -0.2811, 0.4676, 0.4236 /
2951 data (CsCBdel( 4 , i, 9 ),i=1,9)/
2952 + 0.1401, 0.2746, -0.2163, -0.3463, 0.3866,
2953 + -0.2545, -0.1267, 0.257, 0.2332 /
2954 data (CsCBdel( 5 , i, 9 ),i=1,9)/
2955 + 0.05502, 0.1131, -0.0786, -0.1295, 0.1657,
2956 + -0.09712, -0.04289, 0.1034, 0.09503 /
2957 data (CsCBdel( 6 , i, 9 ),i=1,9)/
2958 + 0.01353, 0.02768, -0.01661, -0.02797, 0.03978,
2959 + -0.02127, -0.008133, 0.02257, 0.02181 /
2960 data (BsCBdel( i, 9 ),i=1,9)/
2961 + 0.009832, 0.005141, 0.002487, 0.001379, 0.0008077,
2962 + 0.0003422, 0.0001768, 0.0001453, 8.163e-05 /
2963 data ZsCBdel(10)/ 18 /
2964 data (AsCBdel( 1 , i, 10 ),i=1,9)/
2965 + 0.07435, -0.5446, -0.4682, 0.7745, 0.7001,
2966 + 0.3434, 0.5462, 0.5349, 0.7525 /
2967 data (AsCBdel( 2 , i, 10 ),i=1,9)/
2968 + 0.1468, 0.2051, 0.1962, 0.1519, 0.2065,
2969 + 0.2461, 0.244, 0.2528, 0.2519 /
2970 data (AsCBdel( 3 , i, 10 ),i=1,9)/
2971 + -0.0171, -0.009645, -0.004136, -0.001032, -0.001017,
2972 + -0.0007181, -0.0002647, -0.0001264, -4.787e-05 /
2973 data (AsCBdel( 4 , i, 10 ),i=1,9)/
2974 + 0.001165, 0.0003634, 9.998e-05, 2.092e-05, 8.324e-06,
2975 + 2.704e-06, 4.327e-07, 8.662e-08, 1.365e-08 /
2976 data (CsCBdel( 0 , i, 10 ),i=1,9)/
2977 + -0.1127, 0.7818, 0.9303, -0.8353, -0.8852,
2978 + -0.4207, -0.7605, -0.7908, -1.209 /
2979 data (CsCBdel( 1 , i, 10 ),i=1,9)/
2980 + -0.3553, 0.6983, 1.183, -0.8358, -0.9938,
2981 + -0.4465, -0.8634, -0.901, -1.464 /
2982 data (CsCBdel( 2 , i, 10 ),i=1,9)/
2983 + -0.2223, 0.3838, 0.8746, -0.525, -0.7013,
2984 + -0.3085, -0.6144, -0.6357, -1.093 /
2985 data (CsCBdel( 3 , i, 10 ),i=1,9)/
2986 + -0.1378, 0.1706, 0.515, -0.2731, -0.4069,
2987 + -0.1814, -0.3613, -0.365, -0.661 /
2988 data (CsCBdel( 4 , i, 10 ),i=1,9)/
2989 + -0.06122, 0.06301, 0.2496, -0.1187, -0.1946,
2990 + -0.0904, -0.1764, -0.171, -0.3252 /
2991 data (CsCBdel( 5 , i, 10 ),i=1,9)/
2992 + -0.02011, 0.01852, 0.09367, -0.03974, -0.07045,
2993 + -0.03483, -0.0657, -0.05986, -0.1192 /
2994 data (CsCBdel( 6 , i, 10 ),i=1,9)/
2995 + -0.003889, 0.003374, 0.02073, -0.00764, -0.0145,
2996 + -0.007855, -0.01405, -0.01164, -0.02465 /
2997 data (BsCBdel( i, 10 ),i=1,9)/
2998 + 0.02169, 0.01125, 0.005761, 0.002826, 0.001516,
2999 + 0.0007845, 0.0003452, 0.0001566, 6.648e-05 /
3000 data ZsCBdel(11)/ 54 /
3001 data (AsCBdel( 1 , i, 11 ),i=1,9)/
3002 + 0.2544, 0.004937, 0.4132, 0.6066, 1.275,
3003 + 1.901, 2.456, 2.576, 2.764 /
3004 data (AsCBdel( 2 , i, 11 ),i=1,9)/
3005 + -0.01013, 0.01016, 0.007881, 0.03123, 0.03961,
3006 + 0.06741, 0.1035, 0.1455, 0.1742 /
3007 data (AsCBdel( 3 , i, 11 ),i=1,9)/
3008 + 0.0004744, -3.434e-05, 0.0001231, -5.982e-05, -2.316e-05,
3009 + -3.843e-05, -4.707e-05, -4.937e-05, -2.956e-05 /
3010 data (AsCBdel( 4 , i, 11 ),i=1,9)/
3011 + 8.157e-07, 4.271e-08, 6.323e-08, 8.043e-07, 1.212e-08,
3012 + 1.6e-08, 1.522e-08, 1.106e-08, 2.676e-09 /
3013 data (CsCBdel( 0 , i, 11 ),i=1,9)/
3014 + -0.299, 0.1747, -0.3684, -0.5942, -1.543,
3015 + -2.5, -3.457, -3.721, -4.118 /
3016 data (CsCBdel( 1 , i, 11 ),i=1,9)/
3017 + -0.4626, 0.1589, -0.5238, -0.7772, -1.885,
3018 + -3.017, -4.248, -4.562, -5.088 /
3019 data (CsCBdel( 2 , i, 11 ),i=1,9)/
3020 + -0.2444, 0.3334, -0.2262, -0.5135, -1.412,
3021 + -2.28, -3.275, -3.508, -3.943 /
3022 data (CsCBdel( 3 , i, 11 ),i=1,9)/
3023 + -0.3055, 0.08116, -0.1946, -0.3306, -0.8995,
3024 + -1.426, -2.084, -2.212, -2.495 /
3025 data (CsCBdel( 4 , i, 11 ),i=1,9)/
3026 + -0.04217, 0.1795, -0.07936, -0.178, -0.4912,
3027 + -0.7426, -1.099, -1.146, -1.288 /
3028 data (CsCBdel( 5 , i, 11 ),i=1,9)/
3029 + -0.154, 0.05137, -0.02414, -0.07568, -0.2145,
3030 + -0.2989, -0.4425, -0.4457, -0.4933 /
3031 data (CsCBdel( 6 , i, 11 ),i=1,9)/
3032 + -0.01718, 0.02234, -0.004597, -0.01957, -0.05626,
3033 + -0.07006, -0.1017, -0.09934, -0.1057 /
3034 data (BsCBdel( i, 11 ),i=1,9)/
3035 + 0.009027, 0.001564, 0.002333, 0.001623, 0.0004254,
3036 + 0.0002607, 0.000166, 0.0001006, 4.482e-05 /
3037 +PATCH,HEEDINT.
3038 +DECK,GASHEE.
3039 SUBROUTINE GASHEE(IFAIL)
3040 *-----------------------------------------------------------------------
3041 * GASHEE - Sets the gas composition for HEED
3042 * (Last changed on 14/ 1/00.)
3043 *-----------------------------------------------------------------------
3044 implicit none
3045 +SEQ,DIMENSIONS.
3046 +SEQ,GASDATA.
3047 +SEQ,PRINTPLOT.
3048 +SEQ,molecule.
3049 +SEQ,goevent.
3050 REAL pwmol(pqmol),FRTOT,AUX
3051 INTEGER qmol,nmol(pqmol),IFAIL,INPTYP,INPCMP,IFAIL1,IERROR,
3052 - INEXT,NWORD,I,IOS
3053 LOGICAL USED(pqmol)
3054 EXTERNAL INPTYP,INPCMP
3055 +SELF,IF=SAVE.
3056 SAVE qmol,nmol,pwmol
3057 +SELF.
3058 *** Identify.
3059 IF(LIDENT)PRINT *,' /// ROUTINE GASHEE ///'
3060 PRINT *,' ------ GASHEE MESSAGE : Heed version 1.01,'//
3061 - ' interface last changed on 14/1/00.'
3062 *** Assume the routine will fail.
3063 IFAIL=1
3064 *** Initialise the gas mix.
3065 DO 20 I=1,pqmol
3066 USED(I)=.FALSE.
3067 20 CONTINUE
3068 qmol=0
3069 *** Determine number of words.
3070 CALL INPNUM(NWORD)
3071 *** Loop over the input.
3072 INEXT=2
3073 DO 10 I=2,NWORD
3074 IF(I.LT.INEXT)GOTO 10
3075 *** Fractions, first Argon.
3076 IF(INPCMP(I,'AR#GON').NE.0)THEN
3077 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3078 CALL INPMSG(I,'Argument invalid or missing. ')
3079 ELSEIF(USED(numm_Ar))THEN
3080 CALL INPMSG(I,'Gas already referenced.')
3081 ELSE
3082 CALL INPCHK(I+1,2,IFAIL1)
3083 CALL INPRDR(I+1,AUX,0.0)
3084 qmol=qmol+1
3085 nmol(qmol)=numm_Ar
3086 pwmol(qmol)=AUX
3087 USED(numm_Ar)=.TRUE.
3088 ENDIF
3089 INEXT=I+2
3090 * Methane.
3091 ELSEIF(INPCMP(I,'METHA#NE')+INPCMP(I,'CH4').NE.0)THEN
3092 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3093 CALL INPMSG(I,'Argument invalid or missing. ')
3094 ELSEIF(USED(numm_CH4))THEN
3095 CALL INPMSG(I,'Gas already referenced.')
3096 ELSE
3097 CALL INPCHK(I+1,2,IFAIL1)
3098 CALL INPRDR(I+1,AUX,0.0)
3099 qmol=qmol+1
3100 nmol(qmol)=numm_CH4
3101 pwmol(qmol)=AUX
3102 USED(numm_CH4)=.TRUE.
3103 ENDIF
3104 INEXT=I+2
3105 * Nitrogen.
3106 ELSEIF(INPCMP(I,'NI#TROGEN')+INPCMP(I,'N2').NE.0)THEN
3107 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3108 CALL INPMSG(I,'Argument invalid or missing. ')
3109 ELSEIF(USED(numm_N2))THEN
3110 CALL INPMSG(I,'Gas already referenced.')
3111 ELSE
3112 CALL INPCHK(I+1,2,IFAIL1)
3113 CALL INPRDR(I+1,AUX,0.0)
3114 qmol=qmol+1
3115 nmol(qmol)=numm_N2
3116 pwmol(qmol)=AUX
3117 USED(numm_N2)=.TRUE.
3118 ENDIF
3119 INEXT=I+2
3120 * CO2.
3121 ELSEIF(INPCMP(I,'CO2')+
3122 - INPCMP(I,'CARB#ON-DIOX#IDE').NE.0)THEN
3123 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3124 CALL INPMSG(I,'Argument invalid or missing. ')
3125 ELSEIF(USED(numm_CO2))THEN
3126 CALL INPMSG(I,'Gas already referenced.')
3127 ELSE
3128 CALL INPCHK(I+1,2,IFAIL1)
3129 CALL INPRDR(I+1,AUX,0.0)
3130 qmol=qmol+1
3131 nmol(qmol)=numm_CO2
3132 pwmol(qmol)=AUX
3133 USED(numm_CO2)=.TRUE.
3134 ENDIF
3135 INEXT=I+2
3136 * Helium 4.
3137 ELSEIF(INPCMP(I,'HE#LIUM-#4').NE.0)THEN
3138 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3139 CALL INPMSG(I,'Argument invalid or missing. ')
3140 ELSEIF(USED(numm_He))THEN
3141 CALL INPMSG(I,'Gas already referenced.')
3142 ELSE
3143 CALL INPCHK(I+1,2,IFAIL1)
3144 CALL INPRDR(I+1,AUX,0.0)
3145 qmol=qmol+1
3146 nmol(qmol)=numm_He
3147 pwmol(qmol)=AUX
3148 USED(numm_He)=.TRUE.
3149 ENDIF
3150 INEXT=I+2
3151 * Helium 3.
3152 ELSEIF(INPCMP(I,'HE#LIUM-3').NE.0)THEN
3153 CALL INPMSG(I,'Not yet in HEED.')
3154 INEXT=I+2
3155 * Neon.
3156 ELSEIF(INPCMP(I,'NEON').NE.0)THEN
3157 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3158 CALL INPMSG(I,'Argument invalid or missing. ')
3159 ELSEIF(USED(numm_Ne))THEN
3160 CALL INPMSG(I,'Gas already referenced.')
3161 ELSE
3162 CALL INPCHK(I+1,2,IFAIL1)
3163 CALL INPRDR(I+1,AUX,0.0)
3164 qmol=qmol+1
3165 nmol(qmol)=numm_Ne
3166 pwmol(qmol)=AUX
3167 USED(numm_Ne)=.TRUE.
3168 ENDIF
3169 INEXT=I+2
3170 * Ethane.
3171 ELSEIF(INPCMP(I,'ETHA#NE')+INPCMP(I,'C2H6').NE.0)THEN
3172 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3173 CALL INPMSG(I,'Argument invalid or missing. ')
3174 ELSEIF(USED(numm_C2H6))THEN
3175 CALL INPMSG(I,'Gas already referenced.')
3176 ELSE
3177 CALL INPCHK(I+1,2,IFAIL1)
3178 CALL INPRDR(I+1,AUX,0.0)
3179 qmol=qmol+1
3180 nmol(qmol)=numm_C2H6
3181 pwmol(qmol)=AUX
3182 USED(numm_C2H6)=.TRUE.
3183 ENDIF
3184 INEXT=I+2
3185 * Propane.
3186 ELSEIF(INPCMP(I,'PROPA#NE')+INPCMP(I,'C3H8').NE.0)THEN
3187 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3188 CALL INPMSG(I,'Argument invalid or missing. ')
3189 ELSEIF(USED(numm_C3H8))THEN
3190 CALL INPMSG(I,'Gas already referenced.')
3191 ELSE
3192 CALL INPCHK(I+1,2,IFAIL1)
3193 CALL INPRDR(I+1,AUX,0.0)
3194 qmol=qmol+1
3195 nmol(qmol)=numm_C3H8
3196 pwmol(qmol)=AUX
3197 USED(numm_C3H8)=.TRUE.
3198 ENDIF
3199 INEXT=I+2
3200 * Isobutane.
3201 ELSEIF(INPCMP(I,'ISO#BUTANE')+INPCMP(I,'C4H10').NE.0)THEN
3202 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3203 CALL INPMSG(I,'Argument invalid or missing. ')
3204 ELSEIF(USED(numm_iC4H10))THEN
3205 CALL INPMSG(I,'Gas already referenced.')
3206 ELSE
3207 CALL INPCHK(I+1,2,IFAIL1)
3208 CALL INPRDR(I+1,AUX,0.0)
3209 qmol=qmol+1
3210 nmol(qmol)=numm_iC4H10
3211 pwmol(qmol)=AUX
3212 USED(numm_iC4H10)=.TRUE.
3213 ENDIF
3214 INEXT=I+2
3215 * Pentane.
3216 ELSEIF(INPCMP(I,'PENT#ANE')+INPCMP(I,'C5H12')+
3217 - INPCMP(I,'N#EO-PENT#ANE')+INPCMP(I,'N#EO-C5H12').NE.0)THEN
3218 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3219 CALL INPMSG(I,'Argument invalid or missing. ')
3220 ELSEIF(USED(numm_C5H12))THEN
3221 CALL INPMSG(I,'Gas already referenced.')
3222 ELSE
3223 CALL INPCHK(I+1,2,IFAIL1)
3224 CALL INPRDR(I+1,AUX,0.0)
3225 qmol=qmol+1
3226 nmol(qmol)=numm_C5H12
3227 pwmol(qmol)=AUX
3228 USED(numm_C5H12)=.TRUE.
3229 ENDIF
3230 INEXT=I+2
3231 * Methylal.
3232 ELSEIF(INPCMP(I,'METHY#LAL')+INPCMP(I,'C3H8O2').NE.0)THEN
3233 CALL INPMSG(I,'Not yet in HEED.')
3234 INEXT=I+2
3235 * Xenon.
3236 ELSEIF(INPCMP(I,'XE#NON').NE.0)THEN
3237 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3238 CALL INPMSG(I,'Argument invalid or missing. ')
3239 ELSEIF(USED(numm_Xe))THEN
3240 CALL INPMSG(I,'Gas already referenced.')
3241 ELSE
3242 CALL INPCHK(I+1,2,IFAIL1)
3243 CALL INPRDR(I+1,AUX,0.0)
3244 qmol=qmol+1
3245 nmol(qmol)=numm_Xe
3246 pwmol(qmol)=AUX
3247 USED(numm_Xe)=.TRUE.
3248 ENDIF
3249 INEXT=I+2
3250 * Krypton.
3251 ELSEIF(INPCMP(I,'KR#YPTON').NE.0)THEN
3252 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3253 CALL INPMSG(I,'Argument invalid or missing. ')
3254 ELSEIF(USED(numm_Kr))THEN
3255 CALL INPMSG(I,'Gas already referenced.')
3256 ELSE
3257 CALL INPCHK(I+1,2,IFAIL1)
3258 CALL INPRDR(I+1,AUX,0.0)
3259 qmol=qmol+1
3260 nmol(qmol)=numm_Kr
3261 pwmol(qmol)=AUX
3262 USED(numm_Kr)=.TRUE.
3263 ENDIF
3264 INEXT=I+2
3265 * CF4.
3266 ELSEIF(INPCMP(I,'CF4').NE.0)THEN
3267 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3268 CALL INPMSG(I,'Argument invalid or missing. ')
3269 ELSEIF(USED(numm_CF4))THEN
3270 CALL INPMSG(I,'Gas already referenced.')
3271 ELSE
3272 CALL INPCHK(I+1,2,IFAIL1)
3273 CALL INPRDR(I+1,AUX,0.0)
3274 qmol=qmol+1
3275 nmol(qmol)=numm_CF4
3276 pwmol(qmol)=AUX
3277 USED(numm_CF4)=.TRUE.
3278 ENDIF
3279 INEXT=I+2
3280 * Oxygen.
3281 ELSEIF(INPCMP(I,'OX#YGEN')+INPCMP(I,'O2').NE.0)THEN
3282 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3283 CALL INPMSG(I,'Argument invalid or missing. ')
3284 ELSEIF(USED(numm_O2))THEN
3285 CALL INPMSG(I,'Gas already referenced.')
3286 ELSE
3287 CALL INPCHK(I+1,2,IFAIL1)
3288 CALL INPRDR(I+1,AUX,0.0)
3289 qmol=qmol+1
3290 nmol(qmol)=numm_O2
3291 pwmol(qmol)=AUX
3292 USED(numm_O2)=.TRUE.
3293 ENDIF
3294 INEXT=I+2
3295 * DME.
3296 ELSEIF(INPCMP(I,'DME').NE.0)THEN
3297 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3298 CALL INPMSG(I,'Argument invalid or missing. ')
3299 ELSEIF(USED(numm_DME))THEN
3300 CALL INPMSG(I,'Gas already referenced.')
3301 ELSE
3302 CALL INPCHK(I+1,2,IFAIL1)
3303 CALL INPRDR(I+1,AUX,0.0)
3304 qmol=qmol+1
3305 nmol(qmol)=numm_DME
3306 pwmol(qmol)=AUX
3307 USED(numm_DME)=.TRUE.
3308 ENDIF
3309 INEXT=I+2
3310 * Ethene.
3311 ELSEIF(INPCMP(I,'ETHE#NE')+INPCMP(I,'C2H4').NE.0)THEN
3312 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3313 CALL INPMSG(I,'Argument invalid or missing. ')
3314 ELSEIF(USED(numm_C2H4))THEN
3315 CALL INPMSG(I,'Gas already referenced.')
3316 ELSE
3317 CALL INPCHK(I+1,2,IFAIL1)
3318 CALL INPRDR(I+1,AUX,0.0)
3319 qmol=qmol+1
3320 nmol(qmol)=numm_C2H4
3321 pwmol(qmol)=AUX
3322 USED(numm_C2H4)=.TRUE.
3323 ENDIF
3324 INEXT=I+2
3325 * Acetylene.
3326 ELSEIF(INPCMP(I,'ACETYL#ENE')+INPCMP(I,'C2H2').NE.0)THEN
3327 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3328 CALL INPMSG(I,'Argument invalid or missing. ')
3329 ELSEIF(USED(numm_C2H2))THEN
3330 CALL INPMSG(I,'Gas already referenced.')
3331 ELSE
3332 CALL INPCHK(I+1,2,IFAIL1)
3333 CALL INPRDR(I+1,AUX,0.0)
3334 qmol=qmol+1
3335 nmol(qmol)=numm_C2H2
3336 pwmol(qmol)=AUX
3337 USED(numm_C2H2)=.TRUE.
3338 ENDIF
3339 INEXT=I+2
3340 * Nitric oxide (NO).
3341 ELSEIF(INPCMP(I,'NITRI#C-OX#IDE')+INPCMP(I,'NO').NE.0)THEN
3342 CALL INPMSG(I,'Not yet in HEED.')
3343 INEXT=I+2
3344 * Nitrous oxide (N2O).
3345 ELSEIF(INPCMP(I,'NITRO#US-OX#IDE')+INPCMP(I,'N2O').NE.0)THEN
3346 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3347 CALL INPMSG(I,'Argument invalid or missing. ')
3348 ELSEIF(USED(numm_N2O))THEN
3349 CALL INPMSG(I,'Gas already referenced.')
3350 ELSE
3351 CALL INPCHK(I+1,2,IFAIL1)
3352 CALL INPRDR(I+1,AUX,0.0)
3353 qmol=qmol+1
3354 nmol(qmol)=numm_N2O
3355 pwmol(qmol)=AUX
3356 USED(numm_N2O)=.TRUE.
3357 ENDIF
3358 INEXT=I+2
3359 * Hydrogen gas.
3360 ELSEIF(INPCMP(I,'HYDR#OGEN')+INPCMP(I,'H2').NE.0)THEN
3361 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3362 CALL INPMSG(I,'Argument invalid or missing. ')
3363 ELSEIF(USED(numm_H2))THEN
3364 CALL INPMSG(I,'Gas already referenced.')
3365 ELSE
3366 CALL INPCHK(I+1,2,IFAIL1)
3367 CALL INPRDR(I+1,AUX,0.0)
3368 qmol=qmol+1
3369 nmol(qmol)=numm_H2
3370 pwmol(qmol)=AUX
3371 USED(numm_H2)=.TRUE.
3372 ENDIF
3373 INEXT=I+2
3374 * Ammonia gas.
3375 ELSEIF(INPCMP(I,'AMMO#NIA')+INPCMP(I,'NH3').NE.0)THEN
3376 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3377 CALL INPMSG(I,'Argument invalid or missing. ')
3378 ELSEIF(USED(numm_NH3))THEN
3379 CALL INPMSG(I,'Gas already referenced.')
3380 ELSE
3381 CALL INPCHK(I+1,2,IFAIL1)
3382 CALL INPRDR(I+1,AUX,0.0)
3383 qmol=qmol+1
3384 nmol(qmol)=numm_NH3
3385 pwmol(qmol)=AUX
3386 USED(numm_NH3)=.TRUE.
3387 ENDIF
3388 INEXT=I+2
3389 * Water vapour.
3390 ELSEIF(INPCMP(I,'H2O')+INPCMP(I,'WAT#ER').NE.0)THEN
3391 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3392 CALL INPMSG(I,'Argument invalid or missing. ')
3393 ELSEIF(USED(numm_H2O))THEN
3394 CALL INPMSG(I,'Gas already referenced.')
3395 ELSE
3396 CALL INPCHK(I+1,2,IFAIL1)
3397 CALL INPRDR(I+1,AUX,0.0)
3398 qmol=qmol+1
3399 nmol(qmol)=numm_H2O
3400 pwmol(qmol)=AUX
3401 USED(numm_H2O)=.TRUE.
3402 ENDIF
3403 INEXT=I+2
3404 * SF6.
3405 ELSEIF(INPCMP(I,'SF6').NE.0)THEN
3406 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3407 CALL INPMSG(I,'Argument invalid or missing. ')
3408 ELSEIF(USED(numm_SF6))THEN
3409 CALL INPMSG(I,'Gas already referenced.')
3410 ELSE
3411 CALL INPCHK(I+1,2,IFAIL1)
3412 CALL INPRDR(I+1,AUX,0.0)
3413 qmol=qmol+1
3414 nmol(qmol)=numm_SF6
3415 pwmol(qmol)=AUX
3416 USED(numm_SF6)=.TRUE.
3417 ENDIF
3418 INEXT=I+2
3419 * C2F4H2 (1,1,1,2 tetrafluoroethane, HFC-134a).
3420 ELSEIF(INPCMP(I,'C2F4H2')+INPCMP(I,'C2H2F4')+
3421 - INPCMP(I,'CH2FCF3')+
3422 - INPCMP(I,'HFC-134A').NE.0)THEN
3423 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3424 CALL INPMSG(I,'Argument invalid or missing. ')
3425 ELSEIF(USED(numm_C2F4H2))THEN
3426 CALL INPMSG(I,'Gas already referenced.')
3427 ELSE
3428 CALL INPCHK(I+1,2,IFAIL1)
3429 CALL INPRDR(I+1,AUX,0.0)
3430 qmol=qmol+1
3431 nmol(qmol)=numm_C2F4H2
3432 pwmol(qmol)=AUX
3433 USED(numm_C2F4H2)=.TRUE.
3434 ENDIF
3435 INEXT=I+2
3436 * C2F5H (?).
3437 ELSEIF(INPCMP(I,'C2F5H')+INPCMP(I,'C2HF5').NE.0)THEN
3438 IF(INPTYP(I+1).NE.1.AND.INPTYP(I+1).NE.2.OR.I.GE.NWORD)THEN
3439 CALL INPMSG(I,'Argument invalid or missing. ')
3440 ELSEIF(USED(numm_C2F5H))THEN
3441 CALL INPMSG(I,'Gas already referenced.')
3442 ELSE
3443 CALL INPCHK(I+1,2,IFAIL1)
3444 CALL INPRDR(I+1,AUX,0.0)
3445 qmol=qmol+1
3446 nmol(qmol)=numm_C2F5H
3447 pwmol(qmol)=AUX
3448 USED(numm_C2F5H)=.TRUE.
3449 ENDIF
3450 INEXT=I+2
3451 * All the rest is not known.
3452 ELSE
3453 CALL INPMSG(I,'Not a known keyword.')
3454 ENDIF
3455 10 CONTINUE
3456 *** Print the error messages accumulated sofar.
3457 CALL INPERR
3458 *** Renormalise the fractions.
3459 FRTOT=0.0
3460 DO 120 I=1,qmol
3461 IF(pwmol(I).LT.0)pwmol(I)=0.0
3462 FRTOT=FRTOT+pwmol(I)
3463 120 CONTINUE
3464 IF(FRTOT.LE.0.0)THEN
3465 PRINT *,' !!!!!! GASHEE WARNING : Please have at least'//
3466 - ' one gas in your mixture; nothing done.'
3467 IFAIL=1
3468 RETURN
3469 ELSE
3470 DO 130 I=1,qmol
3471 pwmol(I)=pwmol(I)/FRTOT
3472 130 CONTINUE
3473 ENDIF
3474 *** Debugging information.
3475 IF(LDEBUG)THEN
3476 WRITE(LUNOUT,'('' ++++++ GASHEE DEBUG : Gas mix'',
3477 - '' composed as follows:'')')
3478 DO 30 I=1,qmol
3479 IF(nmol(i).eq.numm_He)THEN
3480 WRITE(LUNOUT,'(26X,''Helium '',F10.3,'' %'')')
3481 - 100*pwmol(I)
3482 ELSEIF(nmol(i).eq.numm_Ne)THEN
3483 WRITE(LUNOUT,'(26X,''Neon '',F10.3,'' %'')')
3484 - 100*pwmol(I)
3485 ELSEIF(nmol(i).eq.numm_Ar)THEN
3486 WRITE(LUNOUT,'(26X,''Argon '',F10.3,'' %'')')
3487 - 100*pwmol(I)
3488 ELSEIF(nmol(i).eq.numm_Kr)THEN
3489 WRITE(LUNOUT,'(26X,''Krypton '',F10.3,'' %'')')
3490 - 100*pwmol(I)
3491 ELSEIF(nmol(i).eq.numm_Xe)THEN
3492 WRITE(LUNOUT,'(26X,''Xenon '',F10.3,'' %'')')
3493 - 100*pwmol(I)
3494 ELSEIF(nmol(i).eq.numm_H2)THEN
3495 WRITE(LUNOUT,'(26X,''H2 '',F10.3,'' %'')')
3496 - 100*pwmol(I)
3497 ELSEIF(nmol(i).eq.numm_N2)THEN
3498 WRITE(LUNOUT,'(26X,''N2 '',F10.3,'' %'')')
3499 - 100*pwmol(I)
3500 ELSEIF(nmol(i).eq.numm_O2)THEN
3501 WRITE(LUNOUT,'(26X,''O2 '',F10.3,'' %'')')
3502 - 100*pwmol(I)
3503 ELSEIF(nmol(i).eq.numm_NH3)THEN
3504 WRITE(LUNOUT,'(26X,''NH3 '',F10.3,'' %'')')
3505 - 100*pwmol(I)
3506 ELSEIF(nmol(i).eq.numm_N2O)THEN
3507 WRITE(LUNOUT,'(26X,''N2O '',F10.3,'' %'')')
3508 - 100*pwmol(I)
3509 ELSEIF(nmol(i).eq.numm_CO2)THEN
3510 WRITE(LUNOUT,'(26X,''CO2 '',F10.3,'' %'')')
3511 - 100*pwmol(I)
3512 ELSEIF(nmol(i).eq.numm_CF4)THEN
3513 WRITE(LUNOUT,'(26X,''CF4 '',F10.3,'' %'')')
3514 - 100*pwmol(I)
3515 ELSEIF(nmol(i).eq.numm_CH4)THEN
3516 WRITE(LUNOUT,'(26X,''CH4 '',F10.3,'' %'')')
3517 - 100*pwmol(I)
3518 ELSEIF(nmol(i).eq.numm_C2H2)THEN
3519 WRITE(LUNOUT,'(26X,''C2H2 '',F10.3,'' %'')')
3520 - 100*pwmol(I)
3521 ELSEIF(nmol(i).eq.numm_C2H4)THEN
3522 WRITE(LUNOUT,'(26X,''C2H4 '',F10.3,'' %'')')
3523 - 100*pwmol(I)
3524 ELSEIF(nmol(i).eq.numm_C2H6)THEN
3525 WRITE(LUNOUT,'(26X,''C2H6 '',F10.3,'' %'')')
3526 - 100*pwmol(I)
3527 ELSEIF(nmol(i).eq.numm_C3H8)THEN
3528 WRITE(LUNOUT,'(26X,''C3H8 '',F10.3,'' %'')')
3529 - 100*pwmol(I)
3530 ELSEIF(nmol(i).eq.numm_iC4H10)THEN
3531 WRITE(LUNOUT,'(26X,''iC4H10 '',F10.3,'' %'')')
3532 - 100*pwmol(I)
3533 ELSEIF(nmol(i).eq.numm_C5H12)THEN
3534 WRITE(LUNOUT,'(26X,''C5H12 '',F10.3,'' %'')')
3535 - 100*pwmol(I)
3536 ELSEIF(nmol(i).eq.numm_DME)THEN
3537 WRITE(LUNOUT,'(26X,''DME '',F10.3,'' %'')')
3538 - 100*pwmol(I)
3539 ELSEIF(nmol(i).eq.numm_H2O)THEN
3540 WRITE(LUNOUT,'(26X,''H2O '',F10.3,'' %'')')
3541 - 100*pwmol(I)
3542 ELSEIF(nmol(i).eq.numm_SF6)THEN
3543 WRITE(LUNOUT,'(26X,''SF6 '',F10.3,'' %'')')
3544 - 100*pwmol(I)
3545 ELSEIF(nmol(i).eq.numm_C2F4H2)THEN
3546 WRITE(LUNOUT,'(26X,''C2F4H2 '',F10.3,'' %'')')
3547 - 100*pwmol(I)
3548 ELSEIF(nmol(i).eq.numm_C2F5H)THEN
3549 WRITE(LUNOUT,'(26X,''C2F5H '',F10.3,'' %'')')
3550 - 100*pwmol(I)
3551 ELSE
3552 WRITE(LUNOUT,'(26X,''# Unknown # '',F10.3,'' %'')')
3553 - 100*pwmol(I)
3554 ENDIF
3555 30 CONTINUE
3556 WRITE(LUNOUT,'(26X,''Pressure: '',F10.3,'' torr''/
3557 - 26X,''Temperature: '',F10.3,'' K'')') PGAS,TGAS
3558 ENDIF
3559 *** Set HEED printing and error monitoring flags.
3560 IF(LDEBUG)THEN
3561 soo=1
3562 ELSE
3563 soo=0
3564 ENDIF
3565 oo=LUNOUT
3566 s_err=0
3567 *** Call the HEED gas routine.
3568 ierror=0
3569 CALL imheed(
3570 - qmol, ! Different gas components
3571 - nmol, ! Names of gasses present in mixture
3572 - pwmol, ! Gas fractions
3573 - PGAS, ! Pressure [torr]
3574 - TGAS, ! Temperature [K]
3575 - 1, ! 0 or 1: Do/don't generate output
3576 - 6, ! Output logical unit
3577 - 1, ! 1/2 Short/Medium listing
3578 - GASDEN, ! (Output) computed density
3579 - ierror) ! Error indicator.
3580 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ GASHEE DEBUG :'',
3581 - '' HEED density: '',F10.3,'' g/l, error code: '',I3)')
3582 - 1000*GASDEN,ierror
3583 *** Return error code.
3584 IF(ierror.NE.0)THEN
3585 PRINT *,' !!!!!! GASHEE WARNING : Gas preparation by'//
3586 - ' HEED failed ; tracks can not be generated.'
3587 IFAIL=1
3588 HEEDOK=.FALSE.
3589 ELSE
3590 IFAIL=0
3591 HEEDOK=.TRUE.
3592 ENDIF
3593 RETURN
3594 *** Write the tables.
3595 ENTRY GASHWR(IFAIL)
3596 * Assume for the moment that writing will work.
3597 IFAIL=0
3598 * See whether iniialisation has been performed.
3599 WRITE(12,'('' Heed initialisation done: '',L1)',ERR=2010,
3600 - IOSTAT=IOS) HEEDOK
3601 IF(HEEDOK)THEN
3602 * Write the composition.
3603 WRITE(12,'('' Gas components: '',I5)',ERR=2010,
3604 - IOSTAT=IOS) qmol
3605 DO 200 I=1,qmol
3606 WRITE(12,'(2X,I10,E15.8)',ERR=2010,IOSTAT=IOS)
3607 - nmol(I),pwmol(I)
3608 200 CONTINUE
3609 ENDIF
3610 RETURN
3611 * Errors during I/O.
3612 2010 CONTINUE
3613 PRINT *,' !!!!!! GASHWR WARNING : I/O error occurred while'//
3614 - ' writing Heed initialisation data.'
3615 CALL INPIOS(IOS)
3616 IFAIL=1
3617 RETURN
3618 *** Retrieve initialisation data.
3619 ENTRY GASHGT(IFAIL)
3620 * Assume for the moment that reading will work.
3621 IFAIL=0
3622 * See whether initialisation should be performed.
3623 READ(12,'(28X,L1)',ERR=2015,IOSTAT=IOS) HEEDOK
3624 IF(HEEDOK)THEN
3625 * Read the composition.
3626 READ(12,'(18X,I5)',ERR=2015,IOSTAT=IOS) qmol
3627 IF(qmol.LT.0.OR.qmol.GT.pqmol)THEN
3628 PRINT *,' !!!!!! GASHGT WARNING : Number of gas'//
3629 - ' components < 0 or > current maximum; Heed'//
3630 - ' initialisation not performed.'
3631 RETURN
3632 ENDIF
3633 DO 210 I=1,qmol
3634 READ(12,'(2X,I10,E15.8)',ERR=2015,IOSTAT=IOS)
3635 - nmol(I),pwmol(I)
3636 210 CONTINUE
3637 * Perform the initialisation.
3638 ierror=0
3639 CALL imheed(
3640 - qmol, ! Different gas components
3641 - nmol, ! Names of gasses present in mixture
3642 - pwmol, ! Gas fractions
3643 - PGAS, ! Pressure [torr]
3644 - TGAS, ! Temperature [K]
3645 - 1, ! 0 or 1: Do/don't generate output
3646 - 6, ! Output logical unit
3647 - 1, ! 1/2 Short/Medium listing
3648 - GASDEN, ! (Output) computed density
3649 - ierror) ! Error indicator.
3650 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ GASHEE DEBUG :'',
3651 - '' HEED density: '',F10.3,'' g/l, error code: '',I3)')
3652 - 1000*GASDEN,ierror
3653 * Return error code.
3654 IF(ierror.NE.0)THEN
3655 PRINT *,' !!!!!! GASHGT WARNING : Gas preparation by'//
3656 - ' HEED failed ; tracks can not be generated.'
3657 IFAIL=1
3658 HEEDOK=.FALSE.
3659 ELSE
3660 IFAIL=0
3661 HEEDOK=.TRUE.
3662 ENDIF
3663 ENDIF
3664 RETURN
3665 * Errors during I/O.
3666 2015 CONTINUE
3667 PRINT *,' !!!!!! GASHGT WARNING : I/O error occurred while'//
3668 - ' retrieving Heed initialisation data.'
3669 CALL INPIOS(IOS)
3670 IFAIL=1
3671 END
3672 +DECK,TRAINT
3673 SUBROUTINE TRAINT
3674 *-----------------------------------------------------------------------
3675 * TRAINT - Initialises the track.
3676 * (Last changed on 14/ 5/99.)
3677 *-----------------------------------------------------------------------
3678 implicit none
3679 +SEQ,DIMENSIONS.
3680 +SEQ,PARAMETERS.
3681 INTEGER I
3682 *** Reset all the track flags.
3683 DO 10 I=1,10
3684 TRFLAG(I)=.FALSE.
3685 10 CONTINUE
3686 *** Set the track type (fixed number of points).
3687 ITRTYP=0
3688 *** Set default number of lines.
3689 NTRLIN=20
3690 TRFLAG(3)=.TRUE.
3691 *** Default number of samples.
3692 NTRSAM=100
3693 TRFLAG(5)=.TRUE.
3694 *** Default number of flux lines.
3695 NTRFLX=20
3696 TRFLAG(6)=.TRUE.
3697 *** Default flux interval.
3698 TRFLUX=10
3699 TRFLAG(7)=.TRUE.
3700 *** Set some track.
3701 XT0=0.0
3702 YT0=0.0
3703 ZT0=0.0
3704 XT1=0.0
3705 YT1=0.0
3706 ZT1=0.0
3707 TRTH=0
3708 TRPHI=0
3709 *** Reset the options.
3710 LTRMS =.FALSE.
3711 LTRDEL=.TRUE.
3712 LTRINT=.FALSE.
3713 LTREXB=.TRUE.
3714 *** Reset the track interpolation table.
3715 CALL DLCTRR
3716 *** Set a default particle type and energy (a 1 GeV mu-)
3717 TRMASS=105.658389
3718 TRCHAR=-1.0
3719 TRENER=1000.0
3720 *** Particle identifier.
3721 PARTID='Unknown'
3722 PNAME='Unknown'
3723 NCPNAM=7
3724 END
3725 +DECK,TRACLS.
3726 SUBROUTINE TRACLS(XCLS,YCLS,ZCLS,ECLS,NPAIR,DONE,IFAIL)
3727 *-----------------------------------------------------------------------
3728 * TRACLS - Generates new clusters along the track.
3729 * TRACLI - Initialisation.
3730 * (Last changed on 24/ 9/00.)
3731 *-----------------------------------------------------------------------
3732 implicit none
3733 +SEQ,DIMENSIONS.
3734 +SEQ,GASDATA.
3735 +SEQ,PARAMETERS.
3736 +SEQ,PRINTPLOT.
3737 +SEQ,CONSTANTS.
3738 +SEQ,volume.
3739 +SEQ,goevent.
3740 +SEQ,del.
3741 +SEQ,cel.
3742 +SEQ,abs.
3743 +SEQ,rga.
3744 +SEQ,lsgvga.
3745 REAL XCLS,YCLS,ZCLS,ECLS,TRALEN,DIST,RNDEXP,RNDM,XAUX,YAUX,ZAUX,
3746 - DISVGA(pqgvga),EDELTA,ETOT,XP,YP,ZP,Q,FLXSUM,FLXCOO(MXLIST),
3747 - FLXTAB(MXLIST),DIVDIF,XL,XL0FLX,XL1FLX
3748 DOUBLE PRECISION XRAN
3749 INTEGER NPAIR,NTOT,NDELTA,IVGA,ICEL,I,J,IERROR,IFAIL,IPRINT,
3750 - NCAUX,NV,ISIGN,JPRINT
3751 LOGICAL DONE,OK
3752 CHARACTER*20 AUX
3753 EXTERNAL RNDEXP,RNDM
3754 +SELF,IF=SAVE.
3755 SAVE NTOT,TRALEN,DIST,OK,IVGA,ICEL,ETOT,FLXCOO,FLXTAB,FLXSUM,
3756 - XL0FLX,XL1FLX
3757 +SELF.
3758 DATA OK/.FALSE./
3759 *** Identify the routine if requested.
3760 IF(LIDENT)PRINT *,' /// ROUTINE TRACLS ///'
3761 *** Initial settings.
3762 XCLS=0
3763 YCLS=0
3764 ZCLS=0
3765 ECLS=0
3766 NPAIR=0
3767 DONE=.TRUE.
3768 IFAIL=1
3769 *** Make sure the routine is in the proper state.
3770 IF(.NOT.OK)THEN
3771 PRINT *,' !!!!!! TRACLS WARNING : Track initialisation'//
3772 - ' not done or track complete; no clusters.'
3773 RETURN
3774 *** Verify that track parameters are available.
3775 ELSEIF(.NOT.TRFLAG(1))THEN
3776 PRINT *,' !!!!!! TRACLS WARNING : Track location is not'//
3777 - ' set; no clusters.'
3778 RETURN
3779 ENDIF
3780 *** Handle the case of a fixed number of clusters.
3781 IF(ITRTYP.EQ.1)THEN
3782 * Ensure that the number is reasonable.
3783 IF(.NOT.TRFLAG(3))THEN
3784 PRINT *,' !!!!!! TRACLS WARNING : Number of points'//
3785 - ' on the track not defined; no clusters.'
3786 RETURN
3787 ENDIF
3788 * Increment cluster counter.
3789 NTOT=NTOT+1
3790 * Compute new cluster position.
3791 IF(NTRLIN.GT.1)THEN
3792 XCLS=XT0+REAL(NTOT-1)*(XT1-XT0)/REAL(NTRLIN-1)
3793 YCLS=YT0+REAL(NTOT-1)*(YT1-YT0)/REAL(NTRLIN-1)
3794 ZCLS=ZT0+REAL(NTOT-1)*(ZT1-ZT0)/REAL(NTRLIN-1)
3795 ELSE
3796 XCLS=0.5*(XT0+XT1)
3797 YCLS=0.5*(YT0+YT1)
3798 ZCLS=0.5*(ZT0+ZT1)
3799 ENDIF
3800 * Set cluster size and energy.
3801 NPAIR=1
3802 ECLS=-1
3803 * See whether we were already done.
3804 IF(NTOT.GT.NTRLIN)THEN
3805 DONE=.TRUE.
3806 OK=.FALSE.
3807 ELSE
3808 DONE=.FALSE.
3809 ENDIF
3810 *** Fixed number of clusters at weighted positions.
3811 ELSEIF(ITRTYP.EQ.5)THEN
3812 * Ensure that the number is reasonable.
3813 IF(.NOT.TRFLAG(4))THEN
3814 PRINT *,' !!!!!! TRACLS WARNING : Weighting function'//
3815 - ' on the track not defined; no clusters.'
3816 RETURN
3817 ELSEIF(.NOT.TRFLAG(5))THEN
3818 PRINT *,' !!!!!! TRACLS WARNING : Number of points'//
3819 - ' on the track not defined; no clusters.'
3820 RETURN
3821 ENDIF
3822 * Increment cluster counter.
3823 NTOT=NTOT+1
3824 * Compute new cluster position.
3825 CALL HISRAD(WGT,MXLIST,0.0D0,1.0D0/MXLIST,XRAN)
3826 XCLS=XT0+REAL(XRAN)*(XT1-XT0)
3827 YCLS=YT0+REAL(XRAN)*(YT1-YT0)
3828 ZCLS=ZT0+REAL(XRAN)*(ZT1-ZT0)
3829 * Set cluster size and energy.
3830 NPAIR=1
3831 ECLS=-1
3832 * See whether we were already done.
3833 IF(NTOT.GT.NTRSAM)THEN
3834 DONE=.TRUE.
3835 OK=.FALSE.
3836 ELSE
3837 DONE=.FALSE.
3838 ENDIF
3839 *** One cluster at a random location.
3840 ELSEIF(ITRTYP.EQ.6)THEN
3841 * Increment cluster counter.
3842 NTOT=NTOT+1
3843 * Compute new cluster position.
3844 XRAN=DBLE(RNDM(NTOT))
3845 XCLS=XT0+REAL(XRAN)*(XT1-XT0)
3846 YCLS=YT0+REAL(XRAN)*(YT1-YT0)
3847 ZCLS=ZT0+REAL(XRAN)*(ZT1-ZT0)
3848 * Set the cluster size and energy.
3849 IF(GASOK(5))THEN
3850 CALL HISRAD(CLSDIS,NCLS,0.0D0,1.0D0,XRAN)
3851 NPAIR=INT(XRAN)
3852 ECLS=NPAIR*EPAIR
3853 ELSE
3854 NPAIR=1
3855 ECLS=0
3856 ENDIF
3857 * See whether we were already done.
3858 IF(NTOT.GT.1)THEN
3859 DONE=.TRUE.
3860 OK=.FALSE.
3861 ELSE
3862 DONE=.FALSE.
3863 ENDIF
3864 *** Handle the case of equally spaced clusters according to CMEAN.
3865 ELSEIF(ITRTYP.EQ.2)THEN
3866 * Ensure that the appropriate gas data is present.
3867 IF(.NOT.GASOK(5))THEN
3868 PRINT *,' !!!!!! TRACLS WARNING : Clustering data'//
3869 - ' from gas section missing; track not set.'
3870 RETURN
3871 ENDIF
3872 * Store track length.
3873 IF(NTOT.EQ.0)
3874 - TRALEN=SQRT((XT1-XT0)**2+(YT1-YT0)**2+(ZT1-ZT0)**2)
3875 * Increment cluster counter.
3876 NTOT=NTOT+1
3877 * Generate new cluster position.
3878 IF(TRALEN.GT.0)THEN
3879 XCLS=XT0+(REAL(NTOT-1)/CMEAN)*(XT1-XT0)/TRALEN
3880 YCLS=YT0+(REAL(NTOT-1)/CMEAN)*(YT1-YT0)/TRALEN
3881 ZCLS=ZT0+(REAL(NTOT-1)/CMEAN)*(ZT1-ZT0)/TRALEN
3882 ELSE
3883 XCLS=0.5*(XT0+XT1)
3884 YCLS=0.5*(YT0+YT1)
3885 ZCLS=0.5*(ZT0+ZT1)
3886 ENDIF
3887 * See whether we're ready.
3888 IF((XT0-XCLS)*(XCLS-XT1).LT.0.OR.
3889 - (YT0-YCLS)*(YCLS-YT1).LT.0.OR.
3890 - (ZT0-ZCLS)*(ZCLS-ZT1).LT.0.OR.
3891 - (TRALEN.LE.0.AND.NTOT.GT.1))THEN
3892 DONE=.TRUE.
3893 OK=.FALSE.
3894 ELSE
3895 DONE=.FALSE.
3896 ENDIF
3897 * Set the cluster size and energy.
3898 CALL HISRAD(CLSDIS,NCLS,0.0D0,1.0D0,XRAN)
3899 NPAIR=INT(XRAN)
3900 ECLS=NPAIR*EPAIR
3901 *** Handle the case of exponentially spaced clusters.
3902 ELSEIF(ITRTYP.EQ.3)THEN
3903 * Ensure that the appropriate gas data is present.
3904 IF(.NOT.GASOK(5))THEN
3905 PRINT *,' !!!!!! TRACLS WARNING : Clustering data'//
3906 - ' from gas section missing; track not set.'
3907 RETURN
3908 ENDIF
3909 * Store track length.
3910 IF(NTOT.EQ.0)THEN
3911 TRALEN=SQRT((XT1-XT0)**2+(YT1-YT0)**2+(ZT1-ZT0)**2)
3912 DIST=0
3913 ENDIF
3914 * Increment cluster counter.
3915 NTOT=NTOT+1
3916 * Generate new cluster position.
3917 IF(TRALEN.GT.0)THEN
3918 DIST=DIST+RNDEXP(1.0/CMEAN)
3919 XCLS=XT0+DIST*(XT1-XT0)/TRALEN
3920 YCLS=YT0+DIST*(YT1-YT0)/TRALEN
3921 ZCLS=ZT0+DIST*(ZT1-ZT0)/TRALEN
3922 ELSE
3923 XCLS=0.5*(XT0+XT1)
3924 YCLS=0.5*(YT0+YT1)
3925 ZCLS=0.5*(ZT0+ZT1)
3926 ENDIF
3927 * See whether we're ready.
3928 IF((XT0-XCLS)*(XCLS-XT1).LT.0.OR.
3929 - (YT0-YCLS)*(YCLS-YT1).LT.0.OR.
3930 - (ZT0-ZCLS)*(ZCLS-ZT1).LT.0.OR.
3931 - (TRALEN.LE.0.AND.NTOT.GT.1))THEN
3932 DONE=.TRUE.
3933 OK=.FALSE.
3934 ELSE
3935 DONE=.FALSE.
3936 ENDIF
3937 * Set the cluster size and energy.
3938 CALL HISRAD(CLSDIS,NCLS,0.0D0,1.0D0,XRAN)
3939 NPAIR=INT(XRAN)
3940 ECLS=EPAIR*NPAIR
3941 *** And finally deal with the case of HEED generated clusters.
3942 ELSEIF(ITRTYP.EQ.4)THEN
3943 ** Check for zero charge tracks.
3944 IF(TRCHAR.EQ.0)THEN
3945 DONE=.TRUE.
3946 XCLS=0
3947 YCLS=0
3948 ZCLS=0
3949 ECLS=0
3950 NPAIR=0
3951 OK=.FALSE.
3952 IFAIL=0
3953 RETURN
3954 ENDIF
3955 ** If this is a request for the first cluster ...
3956 IF(IVGA.EQ.0)THEN
3957 * Ensure that proper data is available.
3958 IF(.NOT.HEEDOK)THEN
3959 PRINT *,' !!!!!! TRACLS WARNING : HEED gas'//
3960 - ' mix not defined; track not set.'
3961 RETURN
3962 ELSEIF(.NOT.TRFLAG(2))THEN
3963 PRINT *,' !!!!!! TRACLS WARNING : Particle'//
3964 - ' properties not present; no clusters.'
3965 RETURN
3966 ENDIF
3967 * Store track length and rotation angles.
3968 IF((XT1-XT0)**2+(ZT1-ZT0)**2.LE.0)THEN
3969 IF(YT1-YT0.LT.0)THEN
3970 TRTH=-PI/2
3971 ELSEIF(YT1-YT0.GT.0)THEN
3972 TRTH=+PI/2
3973 ELSE
3974 TRTH=0
3975 ENDIF
3976 TRPHI=0
3977 ELSE
3978 TRPHI=ATAN2(XT1-XT0,ZT1-ZT0)
3979 TRTH=ATAN2(YT1-YT0,SQRT((XT1-XT0)**2+
3980 - (ZT1-ZT0)**2))
3981 ENDIF
3982 TRALEN=SQRT((XT1-XT0)**2+(YT1-YT0)**2+(ZT1-ZT0)**2)
3983 IF(TRALEN.LE.0)THEN
3984 PRINT *,' !!!!!! TRACLS WARNING : Track length'//
3985 - ' 0 not compatible with HEED; no clusters.'
3986 RETURN
3987 ENDIF
3988 IF(LDEBUG)THEN
3989 WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
3990 - '' Transformation matrix:'',3(/26X,3F10.3)/
3991 - 26X,''Track length: '',E15.8,'' cm.'')')
3992 - COS(TRPHI),-SIN(TRPHI)*SIN(TRTH),
3993 - +SIN(TRPHI)*COS(TRTH),0,COS(TRTH),
3994 - +SIN(TRTH),-SIN(TRPHI),-COS(TRPHI)*SIN(TRTH),
3995 - +COS(TRPHI)*COS(TRTH),TRALEN
3996 ENDIF
3997 * Set the HEED error flag to false.
3998 IF(LDEBUG)THEN
3999 soo=1
4000 ELSE
4001 soo=0
4002 ENDIF
4003 oo=LUNOUT
4004 s_err=0
4005 * Set the tracking volume.
4006 CALL IniFVolume(0,1,1,1,0.0,TRALEN)
4007 * Set the particle type.
4008 IF(LDEBUG)THEN
4009 IPRINT=2
4010 ELSE
4011 IPRINT=1
4012 ENDIF
4013 IERROR=0
4014 CALL ipheed(
4015 - TRENER, ! Particle kinetic energy [MeV]
4016 - TRMASS, ! Particle mass [MeV]
4017 - IPRINT, ! 1/2 Short/Medium listing
4018 - IERROR) ! Error indicator.
4019 IF(IERROR.NE.0)THEN
4020 PRINT *,' !!!!!! TRACLS WARNING : Setting the'//
4021 - ' particle properties in HEED failed.'
4022 RETURN
4023 ENDIF
4024 * Set the track.
4025 CALL IniRTrack(
4026 - 0.0,0.0, ! Starting interval, HEED y [cm]
4027 - 0.0,0.0) ! Track orientation
4028 * Optionally add multiple scattering.
4029 IF(LTRMS)CALL IniMTrack(
4030 - 1, ! Sign of Rutherford angle
4031 - 0.01*GASDEN, ! Step
4032 - 0.001) ! Minimum angle
4033 * Generate a track.
4034 CALL GoEventn(1,1)
4035 * Check for overflow.
4036 IF(qsOverflowagam.GT.0)
4037 - PRINT *,' !!!!!! TRACLS WARNING : Overflow of'//
4038 - ' energy deposition buffer in HEED; no clusters.'
4039 IF(qsOverflowrga.GT.0)
4040 - PRINT *,' !!!!!! TRACLS WARNING : Overflow of'//
4041 - ' real photon buffer in HEED; no clusters.'
4042 IF(qsOverflowDel.GT.0)
4043 - PRINT *,' !!!!!! TRACLS WARNING : Overflow of'//
4044 - ' delta electron buffer in HEED; no clusters.'
4045 IF(qsOverflowCel(1).GT.0)
4046 - PRINT *,' !!!!!! TRACLS WARNING : Overflow of'//
4047 - ' deposited electron buffer in HEED; no clusters.'
4048 IF(qsOverflowagam.GT.0.OR.qsOverflowrga.GT.0.OR.
4049 - qsOverflowDel.GT.0.OR.qsOverflowagam.GT.0)THEN
4050 OK=.FALSE.
4051 DONE=.TRUE.
4052 RETURN
4053 ENDIF
4054 * Sort the virtual gamma's by location.
4055 DO 50 I=1,qgvga(1)
4056 DISVGA(I)=pntgvga(3,I,1)
4057 50 CONTINUE
4058 CALL SORTZV(DISVGA,INDPOS,qgvga(1),1,0,0)
4059 * If debugging is on, print the Virtual GAmma's.
4060 IF(LDEBUG)THEN
4061 WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4062 - '' Virtual gammas: '',I5,'' total dE='',
4063 - E15.8,'' MeV:''/'' Index'',
4064 - '' x [cm] y [cm]'',
4065 - '' z [cm] dE [MeV]'',
4066 - '' order'')')
4067 - qgvga(1),esgvga(1)
4068 DO 10 I=1,qgvga(1)
4069 JPRINT=0
4070 DO 80 J=1,qgvga(1)
4071 IF(INDPOS(J).EQ.I)JPRINT=J
4072 80 CONTINUE
4073 WRITE(LUNOUT,'(2X,I5,4(1X,E15.8),I6)')
4074 - I,(pntgvga(J,I,1),J=1,3),egvga(I,1),JPRINT
4075 10 CONTINUE
4076 * Same for the delta's.
4077 WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4078 - '' Delta + Auger electrons: '',I5/
4079 - '' Index'',
4080 - '' x [cm] y [cm]'',
4081 - '' z [cm] energy [MeV]'',
4082 - '' charge gamma type'')') qdel
4083 DO 20 I=1,qdel
4084 IF(SOdel(I).EQ.0)THEN
4085 WRITE(LUNOUT,'(2X,I5,4(1X,E15.8),F7.1,I6,
4086 - '' delta'')') I,(pntdel(j,i),j=1,3),
4087 - edel(i),zdel(i),ptdel(i)
4088 ELSE
4089 WRITE(LUNOUT,'(2X,I5,4(1X,E15.8),F7.1,I6,
4090 - '' Auger'')') I,(pntdel(j,i),j=1,3),
4091 - edel(i),zdel(i),ptdel(i)
4092 ENDIF
4093 20 CONTINUE
4094 * Same for the real photons.
4095 WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4096 - '' Real photons: '',I5/'' Index'',
4097 - '' x [cm] y [cm]'',
4098 - '' z [cm] energy [MeV]'',
4099 - '' gamma'')') qrga
4100 DO 30 I=1,qrga
4101 WRITE(LUNOUT,'(2X,I5,4(1X,E15.8),I6)')
4102 - I,(pntrga(j,i),j=1,3),erga(i),
4103 - ptrga(i)
4104 30 CONTINUE
4105 * And finally also the electrons.
4106 WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4107 - '' Electrons: '',I5/'' Index'',
4108 - '' x [cm] y [cm]'',
4109 - '' z [cm]'',
4110 - '' charge delta'')') qcel(1)
4111 DO 40 I=1,qcel(1)
4112 WRITE(LUNOUT,'(2X,I5,3(1X,E15.8),F7.1,I6)')
4113 - I,(pntcel(j,i,1),j=1,3),zcel(i,1),
4114 - ndelcel(i,1)
4115 40 CONTINUE
4116 ENDIF
4117 * Store first virtual gamma and electron to deal with.
4118 IVGA=1
4119 ICEL=0
4120 * Reset total energy.
4121 ETOT=0
4122 ENDIF
4123 ** If delta's have to be taken into account.
4124 IF(LTRDEL)THEN
4125 70 CONTINUE
4126 * Increment the electron counter.
4127 ICEL=ICEL+1
4128 * Check whether we've reached the last electron.
4129 IF(ICEL.GT.qcel(1))THEN
4130 * If so, increment the virtual gamma counter.
4131 IVGA=IVGA+1
4132 ICEL=1
4133 * Check whether we've reached the last virtual gamma.
4134 IF(IVGA.GT.qgvga(1))THEN
4135 DONE=.TRUE.
4136 XCLS=0
4137 YCLS=0
4138 ZCLS=0
4139 ECLS=0
4140 NPAIR=0
4141 OK=.FALSE.
4142 IFAIL=0
4143 RETURN
4144 ELSE
4145 DONE=.FALSE.
4146 ENDIF
4147 ELSE
4148 DONE=.FALSE.
4149 ENDIF
4150 * See whether this electron belongs to the right gamma.
4151 IF(ptdel(ndelcel(ICEL,1)).NE.INDPOS(IVGA))GOTO 70
4152 * Fetch the location of this electron.
4153 XAUX=pntcel(1,ICEL,1)
4154 YAUX=pntcel(2,ICEL,1)
4155 ZAUX=pntcel(3,ICEL,1)
4156 C print *,' Taking electron ',icel,' from gamma ',ivga
4157 * Compute the energy deposited in this electron.
4158 EDELTA=edel(ndelcel(ICEL,1))
4159 NDELTA=0
4160 DO 60 I=1,qcel(1)
4161 IF(ndelcel(I,1).EQ.ndelcel(ICEL,1))NDELTA=NDELTA+1
4162 60 CONTINUE
4163 IF(NDELTA.LE.0)THEN
4164 ECLS=-1
4165 ELSE
4166 ECLS=EDELTA/NDELTA
4167 ENDIF
4168 * Check whether we exceeded the total energy.
4169 ETOT=ETOT+ECLS
4170 IF(ETOT.GT.TRENER)THEN
4171 PRINT *,' ------ TRACLS MESSAGE : Track'//
4172 - ' truncated because the deposited'//
4173 - ' energy exceeds the particle energy.'
4174 DONE=.TRUE.
4175 XCLS=0
4176 YCLS=0
4177 ZCLS=0
4178 ECLS=0
4179 NPAIR=0
4180 OK=.FALSE.
4181 IFAIL=0
4182 RETURN
4183 ENDIF
4184 * There is only 1 electron in this case.
4185 NPAIR=1
4186 ** If we don't want deltas ...
4187 ELSE
4188 * Check whether we've already had all energy deposits.
4189 IF(IVGA.GT.qgvga(1))THEN
4190 DONE=.TRUE.
4191 XCLS=0
4192 YCLS=0
4193 ZCLS=0
4194 ECLS=0
4195 NPAIR=0
4196 OK=.FALSE.
4197 IFAIL=0
4198 RETURN
4199 ELSE
4200 DONE=.FALSE.
4201 ENDIF
4202 * Fetch the location of this deposit.
4203 XAUX=pntgvga(1,INDPOS(IVGA),1)
4204 YAUX=pntgvga(2,INDPOS(IVGA),1)
4205 ZAUX=pntgvga(3,INDPOS(IVGA),1)
4206 * Count the number of electrons associated with it.
4207 NPAIR=0
4208 DO 100 I=1,qcel(1)
4209 IF(ptdel(ndelcel(I,1)).EQ.INDPOS(IVGA))NPAIR=NPAIR+1
4210 100 CONTINUE
4211 * Store energy, checking the total energy.
4212 IF(ETOT+egvga(INDPOS(IVGA),1).GT.TRENER)THEN
4213 ECLS=TRENER-ETOT
4214 IVGA=qgvga(1)+1
4215 ELSE
4216 ECLS=egvga(INDPOS(IVGA),1)
4217 ENDIF
4218 ETOT=ETOT+ECLS
4219 * Increment the cluster counter.
4220 IVGA=IVGA+1
4221 ENDIF
4222 ** Rotate the cluster position so that it matches the track.
4223 XCLS=XT0+COS(TRPHI)*XAUX-SIN(TRPHI)*SIN(TRTH)*YAUX+
4224 - SIN(TRPHI)*COS(TRTH)*ZAUX
4225 YCLS=YT0+COS(TRTH)*YAUX+SIN(TRTH)*ZAUX
4226 ZCLS=ZT0-SIN(TRPHI)*XAUX-COS(TRPHI)*SIN(TRTH)*YAUX+
4227 - COS(TRPHI)*COS(TRTH)*ZAUX
4228 *** Fixed number of flux intervals.
4229 ELSEIF(ITRTYP.EQ.7)THEN
4230 * Verify that the number of flux lines has been set.
4231 IF(.NOT.TRFLAG(6))THEN
4232 PRINT *,' !!!!!! TRACLS WARNING : Number of flux'//
4233 - ' lines has not been set; no clusters.'
4234 RETURN
4235 ENDIF
4236 ** On first call, compute the flux intervals.
4237 IF(NTOT.EQ.0)THEN
4238 * Set integration intervals.
4239 NV=5
4240 * Compute the inplane vector normal to the track.
4241 XP=(YT1-YT0)*FPROJC-(ZT1-ZT0)*FPROJB
4242 YP=(ZT1-ZT0)*FPROJA-(XT1-XT0)*FPROJC
4243 ZP=(XT1-XT0)*FPROJB-(YT1-YT0)*FPROJA
4244 * Compute the total flux, accepting positive and negative parts.
4245 CALL FLDIN5(XT0,YT0,ZT1,XT1,YT1,ZT1,XP,YP,ZP,Q,
4246 - 20*NV,0)
4247 IF(Q.GT.0)THEN
4248 ISIGN=+1
4249 ELSE
4250 ISIGN=-1
4251 ENDIF
4252 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4253 - '' Total flux: '',E15.8,'', selected sign '',I1)')
4254 - Q,ISIGN
4255 * Compute the 1-sided flux in a number of steps.
4256 FLXSUM=0
4257 IERROR=0
4258 XL0FLX=-1
4259 XL1FLX=-1
4260 DO 110 I=1,MXLIST
4261 CALL FLDIN5(
4262 - XT0+REAL(I-1)*(XT1-XT0)/REAL(MXLIST),
4263 - YT0+REAL(I-1)*(YT1-YT0)/REAL(MXLIST),
4264 - ZT0+REAL(I-1)*(ZT1-ZT0)/REAL(MXLIST),
4265 - XT0+REAL(I)*(XT1-XT0)/REAL(MXLIST),
4266 - YT0+REAL(I)*(YT1-YT0)/REAL(MXLIST),
4267 - ZT0+REAL(I)*(ZT1-ZT0)/REAL(MXLIST),
4268 - XP,YP,ZP,Q,NV,ISIGN)
4269 FLXCOO(I)=REAL(I)/REAL(MXLIST)
4270 IF(Q.GT.0)THEN
4271 FLXSUM=FLXSUM+Q
4272 IF(XL0FLX.LT.-0.5)XL0FLX=REAL(I-1)/REAL(MXLIST)
4273 XL1FLX=REAL(I)/REAL(MXLIST)
4274 ENDIF
4275 IF(Q.LT.0)IERROR=IERROR+1
4276 FLXTAB(I)=FLXSUM
4277 110 CONTINUE
4278 * Make sure that the sum is positive.
4279 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4280 - '' Used flux: '',E15.8,'' V''/26X,''Start: '',
4281 - F10.3,'' End: '',F10.3)') FLXSUM,XL0FLX,XL1FLX
4282 IF(FLXSUM.LE.0)THEN
4283 PRINT *,' !!!!!! TRACLS WARNING : 1-Sided flux'//
4284 - ' integral is not > 0; no clusters.'
4285 RETURN
4286 ELSEIF(XL0FLX.LT.-0.5.OR.XL1FLX.LT.-0.5.OR.
4287 - XL1FLX.LE.XL0FLX)THEN
4288 PRINT *,' !!!!!! TRACLS WARNING : No flux'//
4289 - ' interval without sign change found.'
4290 RETURN
4291 ELSEIF(IERROR.NE.0)THEN
4292 PRINT *,' ------ TRACLS MESSAGE : The flux'//
4293 - ' changes sign over the track; part of'//
4294 - ' the track not used.'
4295 ENDIF
4296 * Normalise the flux.
4297 DO 120 I=1,MXLIST
4298 FLXTAB(I)=REAL(NTRFLX-1)*FLXTAB(I)/FLXSUM
4299 120 CONTINUE
4300 ENDIF
4301 ** Increment cluster counter.
4302 NTOT=NTOT+1
4303 * Compute new cluster position.
4304 IF(NTOT.EQ.1)THEN
4305 XL=XL0FLX
4306 ELSEIF(NTOT.GE.1.AND.NTOT.LT.NTRFLX)THEN
4307 XL=MIN(XL1FLX,MAX(XL0FLX,
4308 - DIVDIF(FLXCOO,FLXTAB,MXLIST,REAL(NTOT-1),1)))
4309 ELSEIF(NTOT.EQ.NTRFLX)THEN
4310 XL=XL1FLX
4311 ELSE
4312 XL=0.5*(XL1FLX-XL0FLX)
4313 ENDIF
4314 XCLS=XT0+XL*(XT1-XT0)
4315 YCLS=YT0+XL*(YT1-YT0)
4316 ZCLS=ZT0+XL*(ZT1-ZT0)
4317 * Set the cluster size and energy.
4318 NPAIR=1
4319 ECLS=0
4320 * See whether we were already done.
4321 IF(NTOT.GT.NTRFLX)THEN
4322 DONE=.TRUE.
4323 OK=.FALSE.
4324 ELSE
4325 DONE=.FALSE.
4326 ENDIF
4327 *** Fixed flux interval.
4328 ELSEIF(ITRTYP.EQ.8)THEN
4329 * Verify that the number of flux lines has been set.
4330 IF(.NOT.TRFLAG(7))THEN
4331 PRINT *,' !!!!!! TRACLS WARNING : The flux interval'//
4332 - ' has not been set; no clusters.'
4333 RETURN
4334 ENDIF
4335 ** On first call, compute the flux intervals.
4336 IF(NTOT.EQ.0)THEN
4337 * Set integration intervals.
4338 NV=5
4339 * Compute the inplane vector normal to the track.
4340 XP=(YT1-YT0)*FPROJC-(ZT1-ZT0)*FPROJB
4341 YP=(ZT1-ZT0)*FPROJA-(XT1-XT0)*FPROJC
4342 ZP=(XT1-XT0)*FPROJB-(YT1-YT0)*FPROJA
4343 * Compute the total flux, accepting positive and negative parts.
4344 CALL FLDIN5(XT0,YT0,ZT1,XT1,YT1,ZT1,XP,YP,ZP,Q,
4345 - NTRFLX*NV,0)
4346 IF(Q.GT.0)THEN
4347 ISIGN=+1
4348 ELSE
4349 ISIGN=-1
4350 ENDIF
4351 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4352 - '' Total flux: '',E15.8,'' V, sign '',I1)')
4353 - Q,ISIGN
4354 * Compute the 1-sided flux in a number of steps.
4355 FLXSUM=0
4356 IERROR=0
4357 XL0FLX=-1
4358 DO 130 I=1,MXLIST
4359 CALL FLDIN5(
4360 - XT0+REAL(I-1)*(XT1-XT0)/REAL(MXLIST),
4361 - YT0+REAL(I-1)*(YT1-YT0)/REAL(MXLIST),
4362 - ZT0+REAL(I-1)*(ZT1-ZT0)/REAL(MXLIST),
4363 - XT0+REAL(I)*(XT1-XT0)/REAL(MXLIST),
4364 - YT0+REAL(I)*(YT1-YT0)/REAL(MXLIST),
4365 - ZT0+REAL(I)*(ZT1-ZT0)/REAL(MXLIST),
4366 - XP,YP,ZP,Q,NV,ISIGN)
4367 FLXCOO(I)=REAL(I)/REAL(MXLIST)
4368 IF(Q.GT.0)THEN
4369 FLXSUM=FLXSUM+Q
4370 IF(XL0FLX.LT.-0.5)XL0FLX=REAL(I-1)/REAL(MXLIST)
4371 ENDIF
4372 IF(Q.LT.0)IERROR=IERROR+1
4373 FLXTAB(I)=FLXSUM
4374 130 CONTINUE
4375 * Make sure that the sum is positive.
4376 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRACLS DEBUG :'',
4377 - '' Used flux: '',E15.8,'' V ''/26X,
4378 - ''Start offset: '',F10.3)') FLXSUM,XL0FLX
4379 IF(FLXSUM.LE.0)THEN
4380 PRINT *,' !!!!!! TRACLS WARNING : 1-Sided flux'//
4381 - ' integral is not > 0; no clusters.'
4382 RETURN
4383 ELSEIF(XL0FLX.LT.-0.5)THEN
4384 PRINT *,' !!!!!! TRACLS WARNING : No flux'//
4385 - ' interval without sign change found.'
4386 RETURN
4387 ELSEIF(IERROR.NE.0)THEN
4388 PRINT *,' ------ TRACLS MESSAGE : The flux'//
4389 - ' changes sign over the track; part of'//
4390 - ' the track not used.'
4391 ENDIF
4392 ENDIF
4393 ** Increment cluster counter.
4394 NTOT=NTOT+1
4395 * Compute new cluster position.
4396 IF(NTOT.EQ.1)THEN
4397 XL=XL0FLX
4398 DONE=.FALSE.
4399 ELSEIF((NTOT-1)*TRFLUX.LE.FLXSUM)THEN
4400 XL=DIVDIF(FLXCOO,FLXTAB,MXLIST,REAL(NTOT-1)*TRFLUX,1)
4401 DONE=.FALSE.
4402 ELSE
4403 XL=XL0FLX
4404 DONE=.TRUE.
4405 OK=.FALSE.
4406 ENDIF
4407 XCLS=XT0+XL*(XT1-XT0)
4408 YCLS=YT0+XL*(YT1-YT0)
4409 ZCLS=ZT0+XL*(ZT1-ZT0)
4410 * Set the cluster size and energy.
4411 NPAIR=1
4412 ECLS=0
4413 *** Other track types.
4414 ELSE
4415 PRINT *,' !!!!!! TRACLS WARNING : Unknown track type'//
4416 - ' requested; no clusters'
4417 XCLS=0
4418 YCLS=0
4419 ZCLS=0
4420 ECLS=0
4421 NPAIR=0
4422 DONE=.TRUE.
4423 OK=.FALSE.
4424 IFAIL=1
4425 RETURN
4426 ENDIF
4427 *** Seems to have worked, set the IFAIL flag.
4428 IFAIL=0
4429 RETURN
4430 *** Entry point for initialisation.
4431 ENTRY TRACLI
4432 IF(LIDENT)PRINT *,' /// ENTRY TRACLI ///'
4433 * Reset the number of clusters generated sofar.
4434 NTOT=0
4435 IVGA=0
4436 ETOT=0
4437 * Set flag that clustering can proceed.
4438 OK=.TRUE.
4439 *** Set the particle identifier, fixed number.
4440 IF(ITRTYP.EQ.1)THEN
4441 CALL OUTFMT(REAL(NTRLIN),2,AUX,NCAUX,'LEFT')
4442 PARTID=AUX(1:NCAUX)//' equally spaced points'
4443 * Equal.
4444 ELSEIF(ITRTYP.EQ.2)THEN
4445 PARTID='Equally spaced clusters'
4446 * Exponential.
4447 ELSEIF(ITRTYP.EQ.3)THEN
4448 PARTID='Exponentially spaced clusters'
4449 * Heed.
4450 ELSEIF(ITRTYP.EQ.4)THEN
4451 IF(TRENER.LT.0.001)THEN
4452 CALL OUTFMT(TRENER*1000000,2,AUX,NCAUX,'LEFT')
4453 PARTID=PNAME(1:NCPNAM)//', Ekin='//AUX(1:NCAUX)//' eV'
4454 ELSEIF(TRENER.LT.1)THEN
4455 CALL OUTFMT(TRENER*1000,2,AUX,NCAUX,'LEFT')
4456 PARTID=PNAME(1:NCPNAM)//', Ekin='//AUX(1:NCAUX)//' keV'
4457 ELSEIF(TRENER.LT.1000)THEN
4458 CALL OUTFMT(TRENER,2,AUX,NCAUX,'LEFT')
4459 PARTID=PNAME(1:NCPNAM)//', Ekin='//AUX(1:NCAUX)//' MeV'
4460 ELSEIF(TRENER.LT.1000000)THEN
4461 CALL OUTFMT(TRENER/1000,2,AUX,NCAUX,'LEFT')
4462 PARTID=PNAME(1:NCPNAM)//', Ekin='//AUX(1:NCAUX)//' GeV'
4463 ELSE
4464 CALL OUTFMT(TRENER/1000000,2,AUX,NCAUX,'LEFT')
4465 PARTID=PNAME(1:NCPNAM)//', Ekin='//AUX(1:NCAUX)//' TeV'
4466 ENDIF
4467 qgvga(1)=0
4468 qdel=0
4469 qcel(1)=0
4470 qrga=0
4471 * Weighted.
4472 ELSEIF(ITRTYP.EQ.5)THEN
4473 CALL OUTFMT(REAL(NTRSAM),2,AUX,NCAUX,'LEFT')
4474 PARTID=AUX(1:NCAUX)//' samples of '//FCNTRW(1:NCTRW)
4475 * Single cluster.
4476 ELSEIF(ITRTYP.EQ.6)THEN
4477 PARTID='Single cluster'
4478 * Fixed number of flux lines.
4479 ELSEIF(ITRTYP.EQ.7)THEN
4480 CALL OUTFMT(REAL(NTRFLX),2,AUX,NCAUX,'LEFT')
4481 PARTID=AUX(1:NCAUX)//' flux lines'
4482 * Constant flux intervals.
4483 ELSEIF(ITRTYP.EQ.8)THEN
4484 CALL OUTFMT(TRFLUX,2,AUX,NCAUX,'LEFT')
4485 PARTID='Flux intervals of '//AUX(1:NCAUX)//' V'
4486 * Anything else.
4487 ELSE
4488 PARTID='Unknown'
4489 ENDIF
4490 END
4491 +DECK,TRAPLT.
4492 SUBROUTINE TRAPLT
4493 *-----------------------------------------------------------------------
4494 * TRAPLT - Plots the track with the delta electrons.
4495 * (Last changed on 3/10/98.)
4496 *-----------------------------------------------------------------------
4497 implicit none
4498 +SEQ,DIMENSIONS.
4499 +SEQ,PARAMETERS.
4500 +SEQ,GASDATA.
4501 +SEQ,CELLDATA.
4502 +SEQ,volume.
4503 +SEQ,goevent.
4504 +SEQ,del.
4505 +SEQ,cel.
4506 +SEQ,abs.
4507 +SEQ,rga.
4508 +SEQ,lsgvga.
4509 REAL XCLS,YCLS,ZCLS
4510 DOUBLE PRECISION XPLDEL(pqcel),YPLDEL(pqcel),ZPLDEL(pqcel),
4511 - XPLVGA(pqgvga),YPLVGA(pqgvga),ZPLVGA(pqgvga),
4512 - XPL(2),YPL(2),ZPL(2),ETOT
4513 INTEGER NELEC,I,J,K,NPL
4514 *** Apparently a HEED generated track.
4515 IF(HEEDOK.AND.ITRTYP.EQ.4)THEN
4516 ** Pick up relevant portion of the virtual gamma's.
4517 ETOT=0
4518 NPL=0
4519 DO 20 I=1,qgvga(1)
4520 XCLS=XT0+COS(TRPHI)*pntgvga(1,INDPOS(I),1)-
4521 - SIN(TRPHI)*SIN(TRTH)*pntgvga(2,INDPOS(I),1)+
4522 - SIN(TRPHI)*COS(TRTH)*pntgvga(3,INDPOS(I),1)
4523 YCLS=YT0+COS(TRTH)*pntgvga(2,INDPOS(I),1)+
4524 - SIN(TRTH)*pntgvga(3,INDPOS(I),1)
4525 ZCLS=ZT0-SIN(TRPHI)*pntgvga(1,INDPOS(I),1)-
4526 - COS(TRPHI)*SIN(TRTH)*pntgvga(2,INDPOS(I),1)+
4527 - COS(TRPHI)*COS(TRTH)*pntgvga(3,INDPOS(I),1)
4528 ETOT=ETOT+egvga(INDPOS(I),1)
4529 NPL=NPL+1
4530 XPLVGA(NPL)=XCLS
4531 YPLVGA(NPL)=YCLS
4532 ZPLVGA(NPL)=ZCLS
4533 IF(ETOT.GE.TRENER)GOTO 25
4534 20 CONTINUE
4535 * All relevant virtual photons taken.
4536 25 CONTINUE
4537 * Set the appropriate representations.
4538 CALL GRATTS('TRACK','POLYLINE')
4539 CALL GRATTS('TRACK','POLYMARKER')
4540 * Plot the particle trajectory.
4541 IF(POLAR)CALL CF2CTR(XPLVGA,YPLVGA,XPLVGA,YPLVGA,NPL)
4542 IF(NPL.GT.1)THEN
4543 CALL PLAGPL(NPL,XPLVGA,YPLVGA,ZPLVGA)
4544 ELSEIF(NPL.EQ.1)THEN
4545 CALL PLAGPM(NPL,XPLVGA,YPLVGA,ZPLVGA)
4546 ENDIF
4547 ** Next plot each of the deltas and Auger electrons.
4548 ETOT=0
4549 * Loop over the virtual photons.
4550 DO 50 K=1,qgvga(1)
4551 * Loop over the associated delta's.
4552 DO 30 I=1,qdel
4553 IF(ptdel(I).NE.INDPOS(K).OR.edel(I).LE.0)GOTO 30
4554 * Set the attributes depending on the type.
4555 IF(sodel(I).EQ.0)THEN
4556 CALL GRATTS('DELTA-ELECTRON','POLYLINE')
4557 CALL GRATTS('DELTA-ELECTRON','POLYMARKER')
4558 ELSE
4559 CALL GRATTS('AUGER-ELECTRON','POLYLINE')
4560 CALL GRATTS('AUGER-ELECTRON','POLYMARKER')
4561 ENDIF
4562 * Store the starting point.
4563 XCLS=XT0+COS(TRPHI)*pntgvga(1,INDPOS(K),1)-
4564 - SIN(TRPHI)*SIN(TRTH)*pntgvga(2,INDPOS(K),1)+
4565 - SIN(TRPHI)*COS(TRTH)*pntgvga(3,INDPOS(K),1)
4566 YCLS=YT0+COS(TRTH)*pntgvga(2,INDPOS(K),1)+
4567 - SIN(TRTH)*pntgvga(3,INDPOS(K),1)
4568 ZCLS=ZT0-SIN(TRPHI)*pntgvga(1,INDPOS(K),1)-
4569 - COS(TRPHI)*SIN(TRTH)*pntgvga(2,INDPOS(K),1)+
4570 - COS(TRPHI)*COS(TRTH)*pntgvga(3,INDPOS(K),1)
4571 NELEC=1
4572 XPLDEL(NELEC)=XCLS
4573 YPLDEL(NELEC)=YCLS
4574 ZPLDEL(NELEC)=ZCLS
4575 nelec=0
4576 * Find the associated electrons.
4577 DO 40 J=1,qcel(1)
4578 IF(ndelcel(J,1).EQ.I)THEN
4579 NELEC=NELEC+1
4580 XCLS=XT0+COS(TRPHI)*pntcel(1,J,1)-
4581 - SIN(TRPHI)*SIN(TRTH)*pntcel(2,J,1)+
4582 - SIN(TRPHI)*COS(TRTH)*pntcel(3,J,1)
4583 YCLS=YT0+COS(TRTH)*pntcel(2,J,1)+
4584 - SIN(TRTH)*pntcel(3,J,1)
4585 ZCLS=ZT0-SIN(TRPHI)*pntcel(1,J,1)-
4586 - COS(TRPHI)*SIN(TRTH)*pntcel(2,J,1)+
4587 - COS(TRPHI)*COS(TRTH)*pntcel(3,J,1)
4588 XPLDEL(NELEC)=XCLS
4589 YPLDEL(NELEC)=YCLS
4590 ZPLDEL(NELEC)=ZCLS
4591 ENDIF
4592 40 CONTINUE
4593 * Keep track of total energy.
4594 IF(ETOT+edel(I).GT.TRENER)THEN
4595 NELEC=NELEC*(TRENER-ETOT)/edel(I)
4596 ETOT=TRENER+1
4597 ELSE
4598 ETOT=ETOT+edel(I)
4599 ENDIF
4600 * Plot the particle trajectory.
4601 IF(POLAR)CALL CF2CTR(XPLDEL,YPLDEL,XPLDEL,YPLDEL,NELEC)
4602 IF(NELEC.GT.1)THEN
4603 CALL PLAGPL(NELEC,XPLDEL,YPLDEL,ZPLDEL)
4604 ELSEIF(NELEC.EQ.1)THEN
4605 CALL PLAGPM(NELEC,XPLDEL,YPLDEL,ZPLDEL)
4606 ENDIF
4607 * Quit if energy limit reached.
4608 IF(ETOT.GE.TRENER)GOTO 60
4609 * Next delta.
4610 30 CONTINUE
4611 * Next virtual gamma.
4612 50 CONTINUE
4613 * Energy limit.
4614 60 CONTINUE
4615 ** Next plot the real photons.
4616 ETOT=0
4617 * Set attributes.
4618 CALL GRATTS('PHOTON','POLYLINE')
4619 CALL GRATTS('PHOTON','POLYMARKER')
4620 * Loop over virtual gamma's.
4621 DO 150 K=1,qgvga(1)
4622 XCLS=XT0+COS(TRPHI)*pntgvga(1,INDPOS(K),1)-
4623 - SIN(TRPHI)*SIN(TRTH)*pntgvga(2,INDPOS(K),1)+
4624 - SIN(TRPHI)*COS(TRTH)*pntgvga(3,INDPOS(K),1)
4625 YCLS=YT0+COS(TRTH)*pntgvga(2,INDPOS(K),1)+
4626 - SIN(TRTH)*pntgvga(3,INDPOS(K),1)
4627 ZCLS=ZT0-SIN(TRPHI)*pntgvga(1,INDPOS(K),1)-
4628 - COS(TRPHI)*SIN(TRTH)*pntgvga(2,INDPOS(K),1)+
4629 - COS(TRPHI)*COS(TRTH)*pntgvga(3,INDPOS(K),1)
4630 XPL(1)=XCLS
4631 YPL(1)=YCLS
4632 ZPL(1)=ZCLS
4633 * Find the corresponding real photons and plot them.
4634 DO 130 I=1,qrga
4635 IF(ptrga(I).NE.INDPOS(K))GOTO 130
4636 XCLS=XT0+COS(TRPHI)*pntrga(1,I)-
4637 - SIN(TRPHI)*SIN(TRTH)*pntrga(2,I)+
4638 - SIN(TRPHI)*COS(TRTH)*pntrga(3,I)
4639 YCLS=YT0+COS(TRTH)*pntrga(2,I)+
4640 - SIN(TRTH)*pntrga(3,I)
4641 ZCLS=ZT0-SIN(TRPHI)*pntrga(1,I)-
4642 - COS(TRPHI)*SIN(TRTH)*pntrga(2,I)+
4643 - COS(TRPHI)*COS(TRTH)*pntrga(3,I)
4644 XPL(2)=XCLS
4645 YPL(2)=YCLS
4646 ZPL(2)=ZCLS
4647 IF(POLAR)CALL CF2CTR(XPL,YPL,XPL,YPL,2)
4648 CALL PLAGPL(2,XPL,YPL,ZPL)
4649 * Keep track of total energy.
4650 ETOT=ETOT+erga(I)
4651 * Quit if energy limit reached.
4652 IF(ETOT.GE.TRENER)GOTO 160
4653 * Next real photon.
4654 130 CONTINUE
4655 * Next virtual gamma.
4656 150 CONTINUE
4657 * Energy limit.
4658 160 CONTINUE
4659 *** Any other kind of track.
4660 ELSE
4661 * Set the appropriate representations.
4662 CALL GRATTS('TRACK','POLYLINE')
4663 CALL GRATTS('TRACK','POLYMARKER')
4664 * And plot the track as a straight line.
4665 XPL(1)=XT0
4666 YPL(1)=YT0
4667 ZPL(1)=ZT0
4668 XPL(2)=XT1
4669 YPL(2)=YT1
4670 ZPL(2)=ZT1
4671 IF(POLAR)CALL CF2CTR(XPL,YPL,XPL,YPL,2)
4672 CALL PLAGPL(2,XPL,YPL,ZPL)
4673 ENDIF
4674 END
4675 +DECK,TRAREA.
4676 SUBROUTINE TRAREA
4677 *-----------------------------------------------------------------------
4678 * TRAREA - Reads a track definition
4679 * (Last changed on 14/ 5/99.)
4680 *-----------------------------------------------------------------------
4681 implicit none
4682 +SEQ,DIMENSIONS.
4683 +SEQ,PARAMETERS.
4684 +SEQ,PRINTPLOT.
4685 +SEQ,CELLDATA.
4686 +SEQ,GASDATA.
4687 +SEQ,GLOBALS.
4688 INTEGER NWORD,INPCMP,INPTYP,IFAIL1,IFAIL2,IFAIL3,IFAIL4,IFAIL5,
4689 - IFAIL6,NLINR,I,J,INEXT,NCAUX,NRES,NVAR,IENWGT,NCNAME,
4690 - MODVAR(1),NREXP,MODRES(1),NSAMR,IRCOOR,IRWGT,ISCOOR,ISWGT,
4691 - MATSLT,IORD,NC1,NC2,NC3,NC4,NC5,NC6,NFLXR
4692 REAL XMASS,XENER,XDIST,XCHAR,XNORM,XT0D,XT1D,YT0D,YT1D,ZT0D,ZT1D,
4693 - FACT,XDIR,YDIR,ZDIR,RES(1),VAR(1),WGTSUM,FLXR
4694 LOGICAL START,END,DIST,DIR,ENER,MASS,CHARGE,USE(1),OK
4695 EXTERNAL INPCMP,INPTYP,MATSLT
4696 CHARACTER*10 VARLIS(1),NAME
4697 CHARACTER*13 AUX1,AUX2,AUX3,AUX4,AUX5,AUX6
4698 CHARACTER*20 AUX
4699 *** Identify the procedure if requested.
4700 IF(LIDENT)PRINT *,' /// ROUTINE TRAREA ///'
4701 *** Count words.
4702 CALL INPNUM(NWORD)
4703 *** Perhaps only printing has been requested.
4704 IF(NWORD.EQ.1)THEN
4705 * Track location.
4706 IF(TRFLAG(1))THEN
4707 XT0D=XT0
4708 YT0D=YT0
4709 ZT0D=ZT0
4710 XT1D=XT1
4711 YT1D=YT1
4712 ZT1D=ZT1
4713 IF(POLAR)THEN
4714 CALL CFMCTP(XT0D,YT0D,XT0D,YT0D,1)
4715 CALL CFMCTP(XT1D,YT1D,XT1D,YT1D,1)
4716 ENDIF
4717 CALL OUTFMT(XT0D,2,AUX1,NC1,'LEFT')
4718 CALL OUTFMT(YT0D,2,AUX2,NC2,'LEFT')
4719 CALL OUTFMT(ZT0D,2,AUX3,NC3,'LEFT')
4720 CALL OUTFMT(XT1D,2,AUX4,NC4,'LEFT')
4721 CALL OUTFMT(YT1D,2,AUX5,NC5,'LEFT')
4722 CALL OUTFMT(ZT1D,2,AUX6,NC6,'LEFT')
4723 WRITE(LUNOUT,'('' The current track runs from '',
4724 - ''('',A,'','',A,'','',A,'') to '',
4725 - ''('',A,'','',A,'','',A,'').'')')
4726 - AUX1(1:NC1),AUX2(1:NC2),AUX3(1:NC3),
4727 - AUX4(1:NC4),AUX5(1:NC5),AUX6(1:NC6)
4728 ELSE
4729 WRITE(LUNOUT,'('' The location of the track is'',
4730 - '' not yet defined.'')')
4731 ENDIF
4732 * Particle type.
4733 IF(TRFLAG(2))THEN
4734 CALL OUTFMT(TRMASS,2,AUX1,NC1,'LEFT')
4735 CALL OUTFMT(TRENER,2,AUX2,NC2,'LEFT')
4736 CALL OUTFMT(TRCHAR,2,AUX3,NC3,'LEFT')
4737 WRITE(LUNOUT,'('' The particle is a '',A,'' with a'',
4738 - '' mass of '',A,'' MeV,''/'' an energy of '',A,
4739 - '' MeV and a charge of '',A,
4740 - '' proton charges.'')') PNAME(1:NCPNAM),
4741 - AUX1(1:NC1),AUX2(1:NC2),AUX3(1:NC3)
4742 ENDIF
4743 * Clustering type: fixed.
4744 IF(ITRTYP.EQ.1.AND.TRFLAG(3))THEN
4745 CALL OUTFMT(REAL(NTRLIN),2,AUX1,NC1,'LEFT')
4746 WRITE(LUNOUT,'('' There will be '',A,'' equally'',
4747 - '' spaced clusters on the track.'')') AUX1(1:NC1)
4748 ELSEIF(ITRTYP.EQ.1.AND..NOT.TRFLAG(3))THEN
4749 WRITE(LUNOUT,'('' There will be equally'',
4750 - '' spaced clusters on the track.'')')
4751 * Clustering type: equal spacing.
4752 ELSEIF(ITRTYP.EQ.2)THEN
4753 WRITE(LUNOUT,'('' Clusters will be equally spaced'',
4754 - '' respecting the mean from the gas section.'')')
4755 * Clustering type: exponential spacing.
4756 ELSEIF(ITRTYP.EQ.3)THEN
4757 WRITE(LUNOUT,'('' Clusters will be exponentially'',
4758 - '' spaced with a mean distance as entered'',
4759 - '' in the gas section.'')')
4760 * Clustering type: processing by HEED.
4761 ELSEIF(ITRTYP.EQ.4)THEN
4762 WRITE(LUNOUT,'('' Clusters will be generated by'',
4763 - '' HEED,'')')
4764 IF(LTRMS)THEN
4765 WRITE(LUNOUT,'('' the incoming particle'',
4766 - '' undergoes multiple scattering,'')')
4767 ELSE
4768 WRITE(LUNOUT,'('' the incoming particle does'',
4769 - '' not undergo multiple scattering,'')')
4770 ENDIF
4771 IF(LTRDEL)THEN
4772 WRITE(LUNOUT,'('' delta electrons have a'',
4773 - '' spatial extent.'')')
4774 ELSE
4775 WRITE(LUNOUT,'('' delta electrons are'',
4776 - '' compactified onto the main track.'')')
4777 ENDIF
4778 * Weighted cluster location distribution.
4779 ELSEIF(ITRTYP.EQ.5)THEN
4780 CALL OUTFMT(REAL(NTRSAM),2,AUX1,NC1,'LEFT')
4781 WRITE(LUNOUT,'('' There will be '',A,'' clusters'',
4782 - '' at positions weighted according to '',A)')
4783 - AUX1(1:NC1),FCNTRW(1:NCTRW)
4784 * Single cluster.
4785 ELSEIF(ITRTYP.EQ.6)THEN
4786 WRITE(LUNOUT,'('' There will be a single cluster'',
4787 - '' at a random position.'')')
4788 * Equal flux lines.
4789 ELSEIF(ITRTYP.EQ.7)THEN
4790 CALL OUTFMT(REAL(NTRFLX),2,AUX1,NC1,'LEFT')
4791 WRITE(LUNOUT,'('' There will be '',A,'' clusters'',
4792 - '' at equal flux intervals.'')') AUX1(1:NC1)
4793 * Flux intervals.
4794 ELSEIF(ITRTYP.EQ.8)THEN
4795 CALL OUTFMT(TRFLUX,2,AUX1,NC1,'LEFT')
4796 WRITE(LUNOUT,'('' Clusters will be spaced by a'',
4797 - '' flux of '',A,'' V.'')') AUX1(1:NC1)
4798 ENDIF
4799 RETURN
4800 ENDIF
4801 *** Preset flags.
4802 START =.FALSE.
4803 END =.FALSE.
4804 DIST =.FALSE.
4805 DIR =.FALSE.
4806 ENER =.FALSE.
4807 MASS =.FALSE.
4808 CHARGE=.FALSE.
4809 *** Compute default track parameters.
4810 XT0D=XT0
4811 YT0D=YT0
4812 ZT0D=ZT0
4813 XT1D=XT1
4814 YT1D=YT1
4815 ZT1D=ZT1
4816 IF(POLAR)THEN
4817 CALL CFMCTP(XT0D,YT0D,XT0D,YT0D,1)
4818 CALL CFMCTP(XT1D,YT1D,XT1D,YT1D,1)
4819 ENDIF
4820 *** Format: (x0,y0,z0) (x1,y1,z1)
4821 IF(NWORD.GE.7.AND.INPTYP(2).GE.1.AND.INPTYP(3).GE.1.AND.
4822 - INPTYP(4).GE.1.AND.INPTYP(5).GE.1.AND.
4823 - INPTYP(6).GE.1.AND.INPTYP(7).GE.1)THEN
4824 CALL INPCHK(2,2,IFAIL1)
4825 CALL INPCHK(3,2,IFAIL2)
4826 CALL INPCHK(4,2,IFAIL3)
4827 CALL INPCHK(5,2,IFAIL4)
4828 CALL INPCHK(6,2,IFAIL5)
4829 CALL INPCHK(7,2,IFAIL6)
4830 CALL INPRDR(2,XT0D,XT0D)
4831 CALL INPRDR(3,YT0D,YT0D)
4832 CALL INPRDR(4,ZT0D,ZT0D)
4833 CALL INPRDR(5,XT1D,XT1D)
4834 CALL INPRDR(6,YT1D,YT1D)
4835 CALL INPRDR(7,ZT1D,ZT1D)
4836 START=.TRUE.
4837 END=.TRUE.
4838 INEXT=8
4839 *** Format: (x0,y0) (x1,y1)
4840 ELSEIF(NWORD.GE.5.AND.INPTYP(2).GE.1.AND.INPTYP(3).GE.1.AND.
4841 - INPTYP(4).GE.1.AND.INPTYP(5).GE.1)THEN
4842 CALL INPCHK(2,2,IFAIL1)
4843 CALL INPCHK(3,2,IFAIL2)
4844 CALL INPCHK(4,2,IFAIL3)
4845 CALL INPCHK(5,2,IFAIL4)
4846 CALL INPRDR(2,XT0D,XT0D)
4847 CALL INPRDR(3,YT0D,YT0D)
4848 ZT0D=0
4849 CALL INPRDR(4,XT1D,XT1D)
4850 CALL INPRDR(5,YT1D,YT1D)
4851 ZT1D=0
4852 START=.TRUE.
4853 END=.TRUE.
4854 INEXT=6
4855 *** Format: (x0,y0,z0)
4856 ELSEIF(NWORD.GE.4.AND.INPTYP(2).GE.1.AND.INPTYP(3).GE.1.AND.
4857 - INPTYP(4).GE.1)THEN
4858 CALL INPCHK(2,2,IFAIL1)
4859 CALL INPCHK(3,2,IFAIL2)
4860 CALL INPCHK(4,2,IFAIL3)
4861 CALL INPRDR(2,XT0D,XT0D)
4862 CALL INPRDR(3,YT0D,YT0D)
4863 CALL INPRDR(4,ZT0D,ZT0D)
4864 START=.TRUE.
4865 INEXT=5
4866 *** Format: (x0,y0)
4867 ELSEIF(NWORD.GE.3.AND.INPTYP(2).GE.1.AND.INPTYP(3).GE.1)THEN
4868 CALL INPCHK(2,2,IFAIL1)
4869 CALL INPCHK(3,2,IFAIL2)
4870 CALL INPRDR(2,XT0D,XT0D)
4871 CALL INPRDR(3,YT0D,YT0D)
4872 ZT0D=0
4873 START=.TRUE.
4874 INEXT=4
4875 ELSE
4876 INEXT=2
4877 ENDIF
4878 *** Now scan from here on for further arguments.
4879 DO 10 I=1,NWORD
4880 IF(I.LT.INEXT)GOTO 10
4881 * Could be a starting point.
4882 IF(INPCMP(I,'FR#OM')+INPCMP(I,'START#ING-#POINT').NE.0)THEN
4883 IF(NWORD.LT.I+2.OR.
4884 - INPTYP(I+1).LE.0.OR.INPTYP(I+2).LE.0)THEN
4885 CALL INPMSG(I,'Has 2 or 3 real arguments.')
4886 ELSEIF(INPTYP(I+3).LE.0)THEN
4887 CALL INPCHK(I+1,2,IFAIL1)
4888 CALL INPCHK(I+2,2,IFAIL2)
4889 CALL INPRDR(I+1,XT0D,XT0D)
4890 CALL INPRDR(I+2,YT0D,YT0D)
4891 ZT0D=0
4892 START=.TRUE.
4893 INEXT=I+3
4894 ELSE
4895 CALL INPCHK(I+1,2,IFAIL1)
4896 CALL INPCHK(I+2,2,IFAIL2)
4897 CALL INPCHK(I+3,2,IFAIL3)
4898 CALL INPRDR(I+1,XT0D,XT0D)
4899 CALL INPRDR(I+2,YT0D,YT0D)
4900 CALL INPRDR(I+3,ZT0D,ZT0D)
4901 START=.TRUE.
4902 INEXT=I+4
4903 ENDIF
4904 * Could be an end point.
4905 ELSEIF(INPCMP(I,'TO')+INPCMP(I,'END-#POINT').NE.0)THEN
4906 IF(NWORD.LT.I+2.OR.
4907 - INPTYP(I+1).LE.0.OR.INPTYP(I+2).LE.0)THEN
4908 CALL INPMSG(I,'Has 2 or 3 real arguments.')
4909 ELSEIF(INPTYP(I+3).LE.0)THEN
4910 CALL INPCHK(I+1,2,IFAIL1)
4911 CALL INPCHK(I+2,2,IFAIL2)
4912 CALL INPRDR(I+1,XT1D,XT1D)
4913 CALL INPRDR(I+2,YT1D,YT1D)
4914 ZT1D=0
4915 END=.TRUE.
4916 INEXT=I+3
4917 ELSE
4918 CALL INPCHK(I+1,2,IFAIL1)
4919 CALL INPCHK(I+2,2,IFAIL2)
4920 CALL INPCHK(I+3,2,IFAIL3)
4921 CALL INPRDR(I+1,XT1D,XT1D)
4922 CALL INPRDR(I+2,YT1D,YT1D)
4923 CALL INPRDR(I+3,ZT1D,ZT1D)
4924 END=.TRUE.
4925 INEXT=I+4
4926 ENDIF
4927 * Could be a direction vector.
4928 ELSEIF(INPCMP(I,'DIR#ECTION').NE.0)THEN
4929 IF(INPCMP(I+1,'X')+INPCMP(I+1,'POS#ITIVE-X').NE.0)THEN
4930 TRXDIR=+1
4931 TRYDIR= 0
4932 TRZDIR= 0
4933 DIR=.TRUE.
4934 INEXT=I+2
4935 ELSEIF(INPCMP(I+1,'NEG#ATIVE-X').NE.0)THEN
4936 TRXDIR=-1
4937 TRYDIR= 0
4938 TRZDIR= 0
4939 DIR=.TRUE.
4940 INEXT=I+2
4941 ELSEIF(INPCMP(I+1,'Y')+INPCMP(I+1,'POS#ITIVE-Y').NE.0)THEN
4942 TRXDIR= 0
4943 TRYDIR=+1
4944 TRZDIR= 0
4945 DIR=.TRUE.
4946 INEXT=I+2
4947 ELSEIF(INPCMP(I+1,'NEG#ATIVE-Y').NE.0)THEN
4948 TRXDIR= 0
4949 TRYDIR=-1
4950 TRZDIR= 0
4951 DIR=.TRUE.
4952 INEXT=I+2
4953 ELSEIF(INPCMP(I+1,'Z')+INPCMP(I+1,'POS#ITIVE-Z').NE.0)THEN
4954 TRXDIR= 0
4955 TRYDIR= 0
4956 TRZDIR=+1
4957 DIR=.TRUE.
4958 INEXT=I+2
4959 ELSEIF(INPCMP(I+1,'NEG#ATIVE-Z').NE.0)THEN
4960 TRXDIR= 0
4961 TRYDIR= 0
4962 TRZDIR=-1
4963 DIR=.TRUE.
4964 INEXT=I+2
4965 ELSEIF(NWORD.LT.I+2.OR.
4966 - INPTYP(I+1).LE.0.OR.INPTYP(I+2).LE.0)THEN
4967 CALL INPMSG(I,'Has 2 or 3 real arguments.')
4968 ELSEIF(INPTYP(I+3).LE.0)THEN
4969 CALL INPCHK(I+1,2,IFAIL1)
4970 CALL INPCHK(I+2,2,IFAIL2)
4971 CALL INPRDR(I+1,XDIR,0.0)
4972 CALL INPRDR(I+2,YDIR,0.0)
4973 ZDIR=0.0
4974 DIR=.TRUE.
4975 INEXT=I+3
4976 ELSE
4977 CALL INPCHK(I+1,2,IFAIL1)
4978 CALL INPCHK(I+2,2,IFAIL2)
4979 CALL INPCHK(I+3,2,IFAIL3)
4980 CALL INPRDR(I+1,XDIR,0.0)
4981 CALL INPRDR(I+2,YDIR,0.0)
4982 CALL INPRDR(I+3,ZDIR,0.0)
4983 DIR=.TRUE.
4984 INEXT=I+4
4985 ENDIF
4986 IF(DIR)THEN
4987 XNORM=SQRT(XDIR**2+YDIR**2+ZDIR**2)
4988 IF(XNORM.LE.0)THEN
4989 CALL INPMSG(I,'Vector has norm 0')
4990 DIR=.FALSE.
4991 ELSE
4992 XDIR=XDIR/XNORM
4993 YDIR=YDIR/XNORM
4994 ZDIR=ZDIR/XNORM
4995 ENDIF
4996 ENDIF
4997 * Could be a range.
4998 ELSEIF(INPCMP(I,'DIST#ANCE').NE.0.OR.
4999 - INPCMP(I,'RANGE').NE.0)THEN
5000 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5001 CALL INPMSG(I,'Has 1 real argument.')
5002 ELSE
5003 CALL INPCHK(I+1,2,IFAIL1)
5004 CALL INPRDR(I+1,XDIST,-1.0)
5005 IF(XDIST.LT.0)THEN
5006 CALL INPMSG(I+1,'Range is not >= 0.')
5007 ELSE
5008 TRDIST=XDIST
5009 DIST=.TRUE.
5010 ENDIF
5011 INEXT=I+2
5012 ENDIF
5013 * Could be a particle identifier [PDG, Phys Rev D 54 (1996)]
5014 ELSEIF(INPCMP(I,'ELE#CTRON')+INPCMP(I,'E-M#INUS').NE.0)THEN
5015 TRMASS=0.51099907
5016 TRCHAR=-1
5017 MASS=.TRUE.
5018 CHARGE=.TRUE.
5019 PNAME='electron-'
5020 NCPNAM=9
5021 ITRTYP=4
5022 ELSEIF(INPCMP(I,'POS#ITRON')+INPCMP(I,'E-P#LUS')+
5023 - INPCMP(I,'E+').NE.0)THEN
5024 TRMASS=0.51099907
5025 TRCHAR=+1
5026 MASS=.TRUE.
5027 CHARGE=.TRUE.
5028 PNAME='electron+'
5029 NCPNAM=9
5030 ITRTYP=4
5031 ELSEIF(INPCMP(I,'MU#ON-#MINUS').NE.0)THEN
5032 TRMASS=105.658389
5033 TRCHAR=-1
5034 MASS=.TRUE.
5035 CHARGE=.TRUE.
5036 PNAME='mu-'
5037 NCPNAM=3
5038 ITRTYP=4
5039 ELSEIF(INPCMP(I,'MU#ON-P#LUS')+INPCMP(I,'MU+').NE.0)THEN
5040 TRMASS=105.658389
5041 TRCHAR=+1
5042 MASS=.TRUE.
5043 CHARGE=.TRUE.
5044 PNAME='mu+'
5045 NCPNAM=3
5046 ITRTYP=4
5047 ELSEIF(INPCMP(I,'TAU-#MINUS').NE.0)THEN
5048 TRMASS=1777.00
5049 TRCHAR=-1
5050 MASS=.TRUE.
5051 CHARGE=.TRUE.
5052 PNAME='tau-'
5053 NCPNAM=4
5054 ITRTYP=4
5055 ELSEIF(INPCMP(I,'TAU-P#LUS')+INPCMP(I,'TAU+').NE.0)THEN
5056 TRMASS=1777.00
5057 TRCHAR=+1
5058 MASS=.TRUE.
5059 CHARGE=.TRUE.
5060 PNAME='tau+'
5061 NCPNAM=4
5062 ITRTYP=4
5063 ELSEIF(INPCMP(I,'GAMMA')+INPCMP(I,'PHOTON').NE.0)THEN
5064 CALL INPMSG(I,'Photons not yet available.')
5065 ELSEIF(INPCMP(I,'PI#ON-#MINUS').NE.0)THEN
5066 TRMASS=139.56995
5067 TRCHAR=-1
5068 MASS=.TRUE.
5069 CHARGE=.TRUE.
5070 PNAME='pi-'
5071 NCPNAM=3
5072 ITRTYP=4
5073 ELSEIF(INPCMP(I,'PI#ON-0')+INPCMP(I,'PI#ON-Z#ERO')+
5074 - INPCMP(I,'PI0').NE.0)THEN
5075 TRMASS=134.9764
5076 TRCHAR= 0
5077 MASS=.TRUE.
5078 CHARGE=.TRUE.
5079 PNAME='pi0'
5080 NCPNAM=3
5081 ITRTYP=4
5082 ELSEIF(INPCMP(I,'PI#ON-PLUS')+INPCMP(I,'PI+').NE.0)THEN
5083 TRMASS=139.56995
5084 TRCHAR=+1
5085 MASS=.TRUE.
5086 CHARGE=.TRUE.
5087 PNAME='pi+'
5088 NCPNAM=3
5089 ITRTYP=4
5090 ELSEIF(INPCMP(I,'K#AON-#MINUS').NE.0)THEN
5091 TRMASS=493.677
5092 TRCHAR=-1
5093 MASS=.TRUE.
5094 CHARGE=.TRUE.
5095 PNAME='K-'
5096 NCPNAM=2
5097 ITRTYP=4
5098 ELSEIF(INPCMP(I,'K#AON-0-#SHORT')+INPCMP(I,'K#AON-0-#LONG')+
5099 - INPCMP(I,'K0-#SHORT')+INPCMP(I,'K0-#LONG')+
5100 - INPCMP(I,'K#AON-Z#ERO-#SHORT')+
5101 - INPCMP(I,'K#AON-Z#ERO-#LONG')+
5102 - INPCMP(I,'K0-#SHORT')+INPCMP(I,'K0-#LONG').NE.0)THEN
5103 TRMASS=497.672
5104 TRCHAR= 0
5105 MASS=.TRUE.
5106 CHARGE=.TRUE.
5107 PNAME='K0'
5108 NCPNAM=2
5109 ITRTYP=4
5110 ELSEIF(INPCMP(I,'K#AON-P#LUS')+INPCMP(I,'K+').NE.0)THEN
5111 TRMASS=493.677
5112 TRCHAR=-1
5113 MASS=.TRUE.
5114 CHARGE=.TRUE.
5115 PNAME='K+'
5116 NCPNAM=2
5117 ITRTYP=4
5118 ELSEIF(INPCMP(I,'PR#OTON').NE.0)THEN
5119 TRMASS=938.27231
5120 TRCHAR=+1
5121 MASS=.TRUE.
5122 CHARGE=.TRUE.
5123 PNAME='proton'
5124 NCPNAM=6
5125 ITRTYP=4
5126 ELSEIF(INPCMP(I,'ANTI-PR#OTON').NE.0)THEN
5127 TRMASS=938.27231
5128 TRCHAR=-1
5129 MASS=.TRUE.
5130 CHARGE=.TRUE.
5131 PNAME='antiproton'
5132 NCPNAM=10
5133 ITRTYP=4
5134 ELSEIF(INPCMP(I,'N#EUTRON')+INPCMP(I,'ANTI-N#EUTRON').NE.0)THEN
5135 TRMASS=939.56563
5136 TRCHAR= 0
5137 MASS=.TRUE.
5138 CHARGE=.TRUE.
5139 PNAME='neutron'
5140 NCPNAM=7
5141 ITRTYP=4
5142 * Manually described particle, first mass.
5143 ELSEIF(INPCMP(I,'MASS').NE.0)THEN
5144 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5145 CALL INPMSG(I,'Must have 1 real argument')
5146 ELSE
5147 CALL INPCHK(I+1,2,IFAIL1)
5148 CALL INPRDR(I+1,XMASS,TRMASS)
5149 IF(I+2.LE.NWORD.AND.INPCMP(I+2,'EV').NE.0)THEN
5150 FACT=1E-6
5151 INEXT=I+3
5152 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'KEV').NE.0)THEN
5153 FACT=1E-3
5154 INEXT=I+3
5155 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'MEV').NE.0)THEN
5156 FACT=1
5157 INEXT=I+3
5158 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'GEV').NE.0)THEN
5159 FACT=1E+3
5160 INEXT=I+3
5161 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'TEV').NE.0)THEN
5162 FACT=1E+6
5163 INEXT=I+3
5164 ELSE
5165 FACT=1
5166 INEXT=I+2
5167 ENDIF
5168 IF(XMASS.LT.0)THEN
5169 CALL INPMSG(I+1,'Mass is not >= 0.')
5170 ELSE
5171 TRMASS=FACT*XMASS
5172 MASS=.TRUE.
5173 ITRTYP=4
5174 IF(TRMASS.LE.1)THEN
5175 CALL OUTFMT(ANINT(TRMASS*1000)/1000,2,
5176 - AUX,NCAUX,'LEFT')
5177 ELSE
5178 CALL OUTFMT(ANINT(TRMASS),2,
5179 - AUX,NCAUX,'LEFT')
5180 ENDIF
5181 PNAME='m('//AUX(1:NCAUX)//')'
5182 NCPNAM=MIN(LEN(PNAME),NCAUX+3)
5183 ENDIF
5184 ENDIF
5185 * Charge.
5186 ELSEIF(INPCMP(I,'CH#ARGE').NE.0)THEN
5187 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5188 CALL INPMSG(I,'Must have 1 real argument')
5189 ELSE
5190 CALL INPCHK(I+1,2,IFAIL1)
5191 CALL INPRDR(I+1,XCHAR,TRCHAR)
5192 IF(ABS(XCHAR).LT.0.99.OR.ABS(XCHAR).GT.1.01)THEN
5193 CALL INPMSG(I,'Currently only +1 or -1.')
5194 ELSE
5195 TRCHAR=XCHAR
5196 CHARGE=.TRUE.
5197 ITRTYP=4
5198 ENDIF
5199 INEXT=I+2
5200 ENDIF
5201 * Energy of the particle.
5202 ELSEIF(INPCMP(I,'ENE#RGY').NE.0)THEN
5203 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5204 CALL INPMSG(I,'Must have 1 real argument')
5205 ELSE
5206 CALL INPCHK(I+1,2,IFAIL1)
5207 CALL INPRDR(I+1,XENER,TRENER)
5208 IF(I+2.LE.NWORD.AND.INPCMP(I+2,'EV').NE.0)THEN
5209 FACT=1E-6
5210 INEXT=I+3
5211 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'KEV').NE.0)THEN
5212 FACT=1E-3
5213 INEXT=I+3
5214 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'MEV').NE.0)THEN
5215 FACT=1
5216 INEXT=I+3
5217 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'GEV').NE.0)THEN
5218 FACT=1E+3
5219 INEXT=I+3
5220 ELSEIF(I+2.LE.NWORD.AND.INPCMP(I+2,'TEV').NE.0)THEN
5221 FACT=1E+6
5222 INEXT=I+3
5223 ELSE
5224 FACT=1
5225 INEXT=I+2
5226 ENDIF
5227 IF(XENER.LE.0)THEN
5228 CALL INPMSG(I+1,'Energy is not > 0.')
5229 ELSE
5230 TRENER=FACT*XENER
5231 ENER=.TRUE.
5232 ITRTYP=4
5233 ENDIF
5234 ENDIF
5235 * Delta electrons or not.
5236 ELSEIF(INPCMP(I,'DELTA-#ELECTRONS').NE.0)THEN
5237 LTRDEL=.TRUE.
5238 ITRTYP=4
5239 ELSEIF(INPCMP(I,'NODELTA-#ELECTRONS').NE.0)THEN
5240 LTRDEL=.FALSE.
5241 * Trace delta electrons or not.
5242 ELSEIF(INPCMP(I,'TR#ACE-DELTA-#ELECTRONS').NE.0)THEN
5243 LTREXB=.TRUE.
5244 ITRTYP=4
5245 ELSEIF(INPCMP(I,'NOTR#ACE-DELTA-#ELECTRONS').NE.0)THEN
5246 LTREXB=.FALSE.
5247 * Multiple scattering or not.
5248 ELSEIF(INPCMP(I,'MULT#IPLE-SC#ATTERING').NE.0)THEN
5249 LTRMS=.TRUE.
5250 ITRTYP=4
5251 ELSEIF(INPCMP(I,'NOMULT#IPLE-SC#ATTERING').NE.0)THEN
5252 LTRMS=.FALSE.
5253 * Track interpolation or not.
5254 ELSEIF(INPCMP(I,'INT#ERPOLATE-TR#ACK').NE.0)THEN
5255 LTRINT=.TRUE.
5256 ELSEIF(INPCMP(I,'NOINT#ERPOLATE-TR#ACK').NE.0)THEN
5257 LTRINT=.FALSE.
5258 * Number of points on the track.
5259 ELSEIF(INPCMP(I,'LINE#S')+INPCMP(I,'POINT#S').NE.0)THEN
5260 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5261 CALL INPMSG(I,'Must have 1 integer argument')
5262 ELSE
5263 CALL INPCHK(I+1,1,IFAIL1)
5264 CALL INPRDI(I+1,NLINR,NTRLIN)
5265 IF(NLINR.LT.0)THEN
5266 CALL INPMSG(I+1,'Number is not > 0.')
5267 ELSE
5268 NTRLIN=NLINR
5269 TRFLAG(3)=.TRUE.
5270 ITRTYP=1
5271 ENDIF
5272 INEXT=I+2
5273 ENDIF
5274 * Number of sampling points on the track.
5275 ELSEIF(INPCMP(I,'SAMP#LING')+INPCMP(I,'SAMP#LES').NE.0)THEN
5276 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5277 CALL INPMSG(I,'Must have 1 integer argument')
5278 ELSE
5279 CALL INPCHK(I+1,1,IFAIL1)
5280 CALL INPRDI(I+1,NSAMR,NTRSAM)
5281 IF(NLINR.LT.0)THEN
5282 CALL INPMSG(I+1,'Number is not > 0.')
5283 ELSE
5284 NTRSAM=NSAMR
5285 TRFLAG(5)=.TRUE.
5286 ITRTYP=5
5287 ENDIF
5288 INEXT=I+2
5289 ENDIF
5290 ** Weighting function.
5291 ELSEIF(INPCMP(I,'WEIGHT#ING-F#UNCTION').NE.0)THEN
5292 IF(NWORD.LT.I+1)THEN
5293 CALL INPMSG(I,'Should have an argument')
5294 * In the form of matrices.
5295 ELSEIF(INPCMP(I+2,'VS').NE.0.AND.I+3.LE.NWORD)THEN
5296 * Locate the matrices.
5297 IRCOOR=0
5298 IRWGT=0
5299 CALL INPSTR(I+1,I+1,NAME,NCNAME)
5300 DO 110 J=1,NGLB
5301 IF(GLBMOD(J).EQ.5.AND.GLBVAR(J).EQ.NAME(1:NCNAME))
5302 - IRWGT=NINT(GLBVAL(J))
5303 110 CONTINUE
5304 ISWGT=MATSLT(IRWGT)
5305 CALL INPSTR(I+3,I+3,NAME,NCNAME)
5306 DO 120 J=1,NGLB
5307 IF(GLBMOD(J).EQ.5.AND.GLBVAR(J).EQ.NAME(1:NCNAME))
5308 - IRCOOR=NINT(GLBVAL(J))
5309 120 CONTINUE
5310 ISCOOR=MATSLT(IRCOOR)
5311 IF(ISWGT.EQ.0)CALL INPMSG(I+1,'Not a known matrix.')
5312 IF(ISCOOR.EQ.0)CALL INPMSG(I+3,'Not a known matrix.')
5313 * Carry out interpolation.
5314 IF(ISCOOR.NE.0.AND.ISWGT.NE.0)THEN
5315 IORD=2
5316 WGTSUM=0
5317 OK=.TRUE.
5318 DO 130 J=1,MXLIST
5319 VAR(1)=REAL(J-1)/REAL(MXLIST-1)
5320 CALL MATIN1(IRCOOR,IRWGT,1,VAR(1),RES(1),
5321 - ISCOOR,ISWGT,IORD,IFAIL1)
5322 WGT(J)=MAX(0.0,RES(1))
5323 IF(RES(1).LT.0)OK=.FALSE.
5324 WGTSUM=WGTSUM+WGT(J)
5325 130 CONTINUE
5326 IF(WGTSUM.GT.0.AND.OK)THEN
5327 CALL HISPRD(WGT,MXLIST)
5328 ITRTYP=5
5329 CALL INPSTR(I+1,I+3,FCNTRW,NCTRW)
5330 TRFLAG(4)=.TRUE.
5331 ELSEIF(.NOT.OK)THEN
5332 CALL INPMSG(I+1,'Sometimes < 0.')
5333 ELSE
5334 CALL INPMSG(I+1,'Has a zero norm.')
5335 ENDIF
5336 ENDIF
5337 INEXT=I+4
5338 * In the form of a function.
5339 ELSE
5340 CALL INPSTR(I+1,I+1,FCNTRW,NCTRW)
5341 VARLIS(1)='T'
5342 NVAR=1
5343 CALL ALGPRE(FCNTRW(1:NCTRW),NCTRW,VARLIS,NVAR,
5344 - NRES,USE,IENWGT,IFAIL1)
5345 IF(IFAIL1.NE.0)THEN
5346 CALL INPMSG(I+1,'Not a valid function.')
5347 ELSE
5348 WGTSUM=0
5349 OK=.TRUE.
5350 DO 30 J=1,MXLIST
5351 VAR(1)=REAL(J-1)/REAL(MXLIST-1)
5352 MODVAR(1)=2
5353 NVAR=1
5354 NREXP=1
5355 CALL ALGEXE(IENWGT,VAR,MODVAR,NVAR,RES,
5356 - MODRES,NREXP,IFAIL1)
5357 WGT(J)=MAX(0.0,RES(1))
5358 IF(RES(1).LT.0)OK=.FALSE.
5359 WGTSUM=WGTSUM+WGT(J)
5360 30 CONTINUE
5361 CALL ALGCLR(IENWGT)
5362 CALL ALGERR
5363 IF(WGTSUM.GT.0.AND.OK)THEN
5364 CALL HISPRD(WGT,MXLIST)
5365 ITRTYP=5
5366 TRFLAG(4)=.TRUE.
5367 ELSEIF(.NOT.OK)THEN
5368 CALL INPMSG(I+1,'Sometimes < 0.')
5369 ELSE
5370 CALL INPMSG(I+1,'Has a zero norm.')
5371 ENDIF
5372 ENDIF
5373 INEXT=I+2
5374 ENDIF
5375 * Number of sampling points on the track.
5376 ELSEIF(INPCMP(I,'FL#UX-L#INES').NE.0)THEN
5377 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5378 CALL INPMSG(I,'Must have 1 integer argument')
5379 ELSE
5380 CALL INPCHK(I+1,1,IFAIL1)
5381 CALL INPRDI(I+1,NFLXR,NTRFLX)
5382 IF(NFLXR.LT.2)THEN
5383 CALL INPMSG(I+1,'Number is not > 1.')
5384 ELSE
5385 NTRFLX=NFLXR
5386 TRFLAG(6)=.TRUE.
5387 ITRTYP=7
5388 ENDIF
5389 INEXT=I+2
5390 ENDIF
5391 * Number of sampling points on the track.
5392 ELSEIF(INPCMP(I,'FL#UX-INT#ERVALS').NE.0)THEN
5393 IF(NWORD.LT.I+1.OR.INPTYP(I+1).LE.0)THEN
5394 CALL INPMSG(I,'Must have 1 real argument')
5395 ELSE
5396 CALL INPCHK(I+1,2,IFAIL1)
5397 CALL INPRDR(I+1,FLXR,TRFLUX)
5398 IF(FLXR.LE.0)THEN
5399 CALL INPMSG(I+1,'Interval is not > 0.')
5400 ELSE
5401 TRFLUX=FLXR
5402 TRFLAG(7)=.TRUE.
5403 ITRTYP=8
5404 ENDIF
5405 INEXT=I+2
5406 ENDIF
5407 * Kind of cluster generation.
5408 ELSEIF(INPCMP(I,'FIX#ED-#NUMBER').NE.0)THEN
5409 ITRTYP=1
5410 ELSEIF(INPCMP(I,'EQ#UAL-SP#ACING').NE.0)THEN
5411 ITRTYP=2
5412 ELSEIF(INPCMP(I,'EXP#ONENTIAL-#SPACING').NE.0)THEN
5413 ITRTYP=3
5414 ELSEIF(INPCMP(I,'HEED').NE.0)THEN
5415 ITRTYP=4
5416 ELSEIF(INPCMP(I,'WEIGHT#ED-D#ISTRIBUTION').NE.0)THEN
5417 ITRTYP=5
5418 ELSEIF(INPCMP(I,'SIN#GLE-#CLUSTER').NE.0)THEN
5419 ITRTYP=6
5420 IF(.NOT.GASOK(5))PRINT *,' ------ TRAREA MESSAGE :'//
5421 - ' No cluster size distribution; cluster will'//
5422 - ' have size 1.'
5423 ELSEIF(INPCMP(I,'EQ#UAL-FL#UX-#INTERVALS').NE.0)THEN
5424 ITRTYP=7
5425 ELSEIF(INPCMP(I,'CONS#TANT-FL#UX-#INTERVALS').NE.0)THEN
5426 ITRTYP=8
5427 * Not a known keyword.
5428 ELSE
5429 CALL INPMSG(I,'Not a known keyword.')
5430 ENDIF
5431 10 CONTINUE
5432 * Print the error messages.
5433 CALL INPERR
5434 *** If the cell is polar, then reconvert coordinates.
5435 IF(POLAR)THEN
5436 CALL CFMPTC(XT0D,YT0D,XT0,YT0,1)
5437 CALL CFMPTC(XT1D,YT1D,XT1,YT1,1)
5438 ZT0=ZT0D
5439 ZT1=ZT1D
5440 ELSE
5441 XT0=XT0D
5442 XT1=XT1D
5443 YT0=YT0D
5444 YT1=YT1D
5445 ZT0=ZT0D
5446 ZT1=ZT1D
5447 ENDIF
5448 *** Check completeness, first geometry.
5449 IF(START.AND.END.AND.DIST)THEN
5450 PRINT *,' ------ TRAREA MESSAGE : Both end point'//
5451 - ' and range specified; ignoring range.'
5452 XDIR=XT1-XT0
5453 YDIR=YT1-YT0
5454 ZDIR=ZT1-ZT0
5455 TRDIST=SQRT(XDIR**2+YDIR**2+ZDIR**2)
5456 IF(TRDIST.GT.0)THEN
5457 XDIR=XDIR/TRDIST
5458 YDIR=YDIR/TRDIST
5459 ZDIR=ZDIR/TRDIST
5460 ELSE
5461 XDIR=0
5462 YDIR=0
5463 ZDIR=0
5464 ENDIF
5465 * If neither end point nor direction and distance: assume point.
5466 ELSEIF(START.AND.(.NOT.END).AND.(.NOT.(DIST.AND.DIR)))THEN
5467 PRINT *,' ------ TRAREA MESSAGE : Only start point'//
5468 - ' specified; assuming single point track.'
5469 XT1=XT0
5470 YT1=YT0
5471 ZT1=ZT0
5472 XDIR=0
5473 YDIR=0
5474 ZDIR=0
5475 TRDIST=0
5476 * If end point missing, compute from direction and range.
5477 ELSEIF(START.AND..NOT.END)THEN
5478 XT1=XT0+XDIR*TRDIST
5479 YT1=YT0+YDIR*TRDIST
5480 ZT1=ZT0+ZDIR*TRDIST
5481 * If direction and range missing, compute from end point.
5482 ELSEIF(START)THEN
5483 XDIR=XT1-XT0
5484 YDIR=YT1-YT0
5485 ZDIR=ZT1-ZT0
5486 TRDIST=SQRT(XDIR**2+YDIR**2+ZDIR**2)
5487 IF(TRDIST.GT.0)THEN
5488 XDIR=XDIR/TRDIST
5489 YDIR=YDIR/TRDIST
5490 ZDIR=ZDIR/TRDIST
5491 ELSE
5492 XDIR=0
5493 YDIR=0
5494 ZDIR=0
5495 ENDIF
5496 ENDIF
5497 * Set the track location flag if appropriate, reset preparation.
5498 IF(START)THEN
5499 TRFLAG(1)=.TRUE.
5500 CALL DLCTRR
5501 ENDIF
5502 * Check mass etc.
5503 IF(MASS.OR.CHARGE.OR.ENER)THEN
5504 IF(.NOT.CHARGE)THEN
5505 TRCHAR=-1.0
5506 PRINT *,' ------ TRAREA MESSAGE : Charge not'//
5507 - ' specified; assuming negative charge.'
5508 ENDIF
5509 IF(.NOT.MASS)THEN
5510 TRMASS=105.658389
5511 IF(TRCHAR.LT.0)THEN
5512 PNAME='mu-'
5513 ELSE
5514 PNAME='mu-'
5515 ENDIF
5516 NCPNAM=3
5517 PRINT *,' ------ TRAREA MESSAGE : Mass not'//
5518 - ' specified; assuming a muon.'
5519 ENDIF
5520 IF(.NOT.ENER)THEN
5521 TRENER=1000.0
5522 PRINT *,' ------ TRAREA MESSAGE : Energy not'//
5523 - ' specified; assuming 1 GeV.'
5524 ENDIF
5525 TRFLAG(2)=.TRUE.
5526 ENDIF
5527 *** Debugging output.
5528 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRAREA DEBUG : '',
5529 - ''Start ('',E15.8,'','',E15.8,'','',E15.8,'')''/26X,
5530 - ''To ('',E15.8,'','',E15.8,'','',E15.8,'')''/26X,
5531 - ''Direction ('',E15.8,'','',E15.8,'','',E15.8,'')''/26X,
5532 - ''Range ='',E15.8,'' cm''/26X,
5533 - ''Mass ='',E15.8,'' MeV''/26X,
5534 - ''Energy ='',E15.8,'' MeV''/26X,
5535 - ''Charge ='',E15.8,'' electron charges''/26X,
5536 - ''Lines ='',I5/26X,
5537 - ''Type ='',I5,'' (1=fixed, 2=equal, 3=exp, 4=HEED,'',
5538 - '' 5=weighted, 6=single, 7=flux)''/26X,
5539 - ''Location '',L1,'', particle '',L1,'', lines '',L1/26X,
5540 - ''weighting function '',L1,'', samples '',L1/26X,
5541 - ''flux lines '',L1/26X,
5542 - ''MS '',L1,'', delta '',L1,'', trace delta '',L1,
5543 - '', interpolate '',L1)')
5544 - XT0,YT0,ZT0,XT1,YT1,ZT1,XDIR,YDIR,ZDIR,
5545 - TRDIST,TRMASS,TRENER,TRCHAR,NTRLIN,ITRTYP,
5546 - (TRFLAG(I),I=1,5),LTRMS,LTRDEL,LTREXB,LTRINT
5547 END
5548 +DECK,TRAEXB.
5549 SUBROUTINE TRAEXB(XIN,VIN,XOUT,VOUT,ENERGY,STEP,IFAIL)
5550 *-----------------------------------------------------------------------
5551 * TRAEXB - Traces an electron through an E and B field.
5552 * (Last changed on 10/ 2/97.)
5553 *-----------------------------------------------------------------------
5554 implicit none
5555 +SEQ,DIMENSIONS.
5556 +SEQ,CONSTANTS.
5557 +SEQ,PRINTPLOT.
5558 +SEQ,PARAMETERS.
5559 DOUBLE PRECISION XIN(3),XOUT(3),VEL(3),
5560 - DT,T,WORK(18),SPEED,VNORM,STEP,RADIUS,GAMMA
5561 REAL BX,BY,BZ,BTOT,XPOS,YPOS,ZPOS,VIN(3),VOUT(3),ENERGY
5562 INTEGER I,IFAIL,NSTEP
5563 EXTERNAL TRASUB
5564 COMMON /EXBCOM/ GAMMA
5565 *** For now, assume that the routine will fail.
5566 IFAIL=1
5567 *** Ensure that the energy is larger than 0.
5568 IF(ENERGY.LE.0)THEN
5569 PRINT *,' !!!!!! TRAEXB WARNING : Energy is not > 0;'//
5570 - ' not traced.'
5571 RETURN
5572 ENDIF
5573 *** Compute particle's speed (eV gives m/sec, need MeV to cm/microsec)
5574 SPEED=CLIGHT*SQRT(1-1/(1+(ECHARG*ENERGY)/
5575 - (100*EMASS*CLIGHT**2))**2)
5576 *** Compute gamma factor which we'll need for the trajectory.
5577 GAMMA=1/SQRT(1-(SPEED/CLIGHT)**2)
5578 *** Debugging output.
5579 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRAEXB DEBUG : Energy: '',
5580 - E15.8,'' MeV''/26X,''Speed: '',E15.8,'' cm/microsec''/
5581 - 26X,''Gamma: '',E15.8)') ENERGY,SPEED,GAMMA
5582 *** Establish the speed vector.
5583 VNORM=SQRT(VIN(1)**2+VIN(2)**2+VIN(3)**2)
5584 IF(VNORM.LE.0)THEN
5585 PRINT *,' !!!!!! TRAEXB WARNING : Speed vector has norm'//
5586 - ' 0; not traced.'
5587 RETURN
5588 ENDIF
5589 VEL(1)=SPEED*VIN(1)/VNORM
5590 VEL(2)=SPEED*VIN(2)/VNORM
5591 VEL(3)=SPEED*VIN(3)/VNORM
5592 *** First estimate of the step size to be taken.
5593 NSTEP=10
5594 DT=STEP/(10*SPEED)
5595 *** Estimate bending radius so as to get the scale for integration.
5596 XPOS=XT0+COS(TRPHI)*XIN(1)-
5597 - SIN(TRPHI)*SIN(TRTH)*XIN(2)+
5598 - SIN(TRPHI)*COS(TRTH)*XIN(3)
5599 YPOS=YT0+COS(TRTH)*XIN(2)+
5600 - SIN(TRTH)*XIN(3)
5601 ZPOS=ZT0-SIN(TRPHI)*XIN(1)-
5602 - COS(TRPHI)*SIN(TRTH)*XIN(2)+
5603 - COS(TRPHI)*COS(TRTH)*XIN(3)
5604 CALL BFIELD(XPOS,YPOS,ZPOS,BX,BY,BZ,BTOT)
5605 IF(BTOT.GT.0)THEN
5606 RADIUS=1.0D8*(EMASS*SPEED)/(ECHARG*BTOT)
5607 IF(LDEBUG)WRITE(LUNOUT,'('' ++++++ TRAEXB DEBUG :'',
5608 - '' Bending radius: '',E15.8,'' cm.'')') RADIUS
5609 IF(RADIUS.LT.STEP)THEN
5610 NSTEP=NSTEP*2*NINT(STEP/RADIUS)
5611 DT=DT/(2*NINT(STEP/RADIUS))
5612 ENDIF
5613 ENDIF
5614 *** Starting conditions.
5615 T=0
5616 *** Make steps.
5617 XOUT(1)=XIN(1)
5618 XOUT(2)=XIN(2)
5619 XOUT(3)=XIN(3)
5620 DO 10 I=1,NSTEP
5621 CALL DRKNYS(3,DT,T,XOUT,VEL,TRASUB,WORK)
5622 10 CONTINUE
5623 *** At the end, return the new velocity vector.
5624 VNORM=SQRT(VEL(1)**2+VEL(2)**2+VEL(3)**2)
5625 VOUT(1)=VEL(1)/VNORM
5626 VOUT(2)=VEL(2)/VNORM
5627 VOUT(3)=VEL(3)/VNORM
5628 *** Things seem to have worked properly.
5629 IFAIL=0
5630 END
5631 +DECK,TRASUB.
5632 SUBROUTINE TRASUB(T,X,V,F)
5633 *-----------------------------------------------------------------------
5634 * TRASUB - Called when integrating the orbit of an electron.
5635 * (Last changed on 11/ 2/97.)
5636 *-----------------------------------------------------------------------
5637 implicit none
5638 +SEQ,DIMENSIONS.
5639 +SEQ,CONSTANTS.
5640 +SEQ,PARAMETERS.
5641 DOUBLE PRECISION T,X(3),V(3),F(3),GAMMA
5642 REAL EX,EY,EZ,ETOT,VOLT,BX,BY,BZ,BTOT,XPOS,YPOS,ZPOS,
5643 - EHX,EHY,EHZ,BHX,BHY,BHZ
5644 INTEGER ILOC
5645 COMMON /EXBCOM/ GAMMA
5646 *** Transform from Heed to Garfield coordinates.
5647 XPOS=XT0+COS(TRPHI)*X(1)-
5648 - SIN(TRPHI)*SIN(TRTH)*X(2)+
5649 - SIN(TRPHI)*COS(TRTH)*X(3)
5650 YPOS=YT0+COS(TRTH)*X(2)+SIN(TRTH)*X(3)
5651 ZPOS=ZT0-SIN(TRPHI)*X(1)-
5652 - COS(TRPHI)*SIN(TRTH)*X(2)+
5653 - COS(TRPHI)*COS(TRTH)*X(3)
5654 *** Compute the E and B field at the current position.
5655 CALL EFIELD(XPOS,YPOS,ZPOS,EX,EY,EZ,ETOT,VOLT,0,ILOC)
5656 CALL BFIELD(XPOS,YPOS,ZPOS,BX,BY,BZ,BTOT)
5657 *** Transform the E and B field to Heed coordinates.
5658 EHX= COS(TRPHI)* EX -SIN(TRPHI)* EZ
5659 EHY=-SIN(TRPHI)*SIN(TRTH)*EX+COS(TRTH)*EY-COS(TRPHI)*SIN(TRTH)*EZ
5660 EHZ= SIN(TRPHI)*COS(TRTH)*EX+SIN(TRTH)*EY+COS(TRPHI)*COS(TRTH)*EZ
5661 BHX= COS(TRPHI)* BX -SIN(TRPHI)* BZ
5662 BHY=-SIN(TRPHI)*SIN(TRTH)*BX+COS(TRTH)*BY-COS(TRPHI)*SIN(TRTH)*BZ
5663 BHZ= SIN(TRPHI)*COS(TRTH)*BX+SIN(TRTH)*BY+COS(TRPHI)*COS(TRTH)*BZ
5664 *** Compute the force/mass [from C*V/cm to cm/microsec**2]
5665 F(1)=-1.0D-8*ECHARG*(EHX+V(2)*BHZ-V(3)*BHY)/(EMASS*GAMMA)
5666 F(2)=-1.0D-8*ECHARG*(EHY+V(3)*BHX-V(1)*BHZ)/(EMASS*GAMMA)
5667 F(3)=-1.0D-8*ECHARG*(EHZ+V(1)*BHY-V(2)*BHX)/(EMASS*GAMMA)
5668 END
5669 +PATCH,HEEDSUB.
5670 +DECK,PSHEED,IF=PSHEED.
5671 program PSHEED
5672
5673 implicit none
5674
5675 c include 'molecules.inc'
5676 +SEQ,molecule.
5677 c include 'molecdef.inc'
5678 +SEQ,molecdef.
5679 c include 'hs.inc'
5680 +SEQ,hs.
5681
5682
5683 integer qmol ! Quantity of different molecules
5684 ! in the gas mixture.
5685 integer nmol(pqMol) ! Their numbers from molecules.inc.
5686 ! Use only the named constants
5687 ! for compartibility with future versions.
5688 real wmol(pqMol) ! Their weights
5689 ! (relative quantities of molecules).
5690 real pres ! Pressure in Torr.
5691 real temp ! Temperature in K.
5692 real tkener ! Kinetic energy of incident particle(MeV).
5693 real mas ! Mass of incident particle(MeV)
5694 integer maxnum ! Maximum size of cluster(not used now).
5695 integer soo ! Flag allowed for writting.
5696 integer oo ! Output stream number.
5697 integer debug ! Flag allowed for writting of
5698 ! more amount of information.
5699
5700 c Output parameters:
5701 real density ! Density, calculated as for ideal gas, gr/cm3
5702 real dedx ! Mean dE/dx, mean energy loss, KeV/cm.
5703 real ntotal ! Average total number.
5704 real nclust ! number of clusters per cm.
5705 real clprob(msize) ! Probability of the clusters,
5706 ! Size=index.
5707 integer ierror ! Sign of error( 0 -- no error ).
5708
5709 integer n
5710
5711 c qmol=1
5712
5713 c nmol(1)=numm_Ar
5714 c wmol(1)=1.0
5715 c nmol(1)=numm_CF4
5716 c wmol(1)=1.0
5717
5718 qmol=3
5719 nmol(1)=numm_Ar
5720 wmol(1)=0.30
5721 nmol(2)=numm_CO2
5722 wmol(2)=0.50
5723 nmol(3)=numm_CF4
5724 wmol(3)=0.20
5725
5726 pres=0.0
5727 temp=0.0
5728 tkener=0.0
5729 mas=0.0
5730 maxnum=0.0
5731
5732 soo=0
5733 oo=10
5734 open(oo,FILE='Heed.out')
5735
5736 debug=0
5737
5738
5739
5740
5741 call SHEED
5742 + (qmol, nmol, wmol, pres, temp,
5743 + tkener, mas, maxnum, soo, oo, debug,
5744 + dedx, ntotal, nclust, clprob, ierror)
5745
5746 write(oo,*)' mean energy loss(KeV/cm)=',dedx
5747 write(oo,*)' total electron-ion pair number=',ntotal
5748 write(oo,*)' mean cluster number=',nclust
5749 do n=1,msize
5750 write(oo,*)n,clprob(n)
5751 enddo
5752
5753 end
5754
5755
5756 +DECK,SHEED,IF=SHEED.
5757
5758 subroutine SHEED
5759 + (qmol, nmol, pwmol, ppres, ptemp,
5760 + ptkener, pmas, maxnum, psoo, poo, debug,
5761 + density, dedx, ntotal, nclust, clprob, ierror)
5762 c
5763 c The subroutine for calculation of cluster size table by HEED package
5764 c
5765 implicit none
5766
5767 c include 'GoEvent.inc'
5768 +SEQ,GoEvent.
5769 c include 'molecules.inc'
5770 +SEQ,molecule.
5771 c include 'molecdef.inc'
5772 +SEQ,molecdef.
5773
5774
5775 c include 'ener.inc'
5776 +SEQ,ener.
5777 c include 'atoms.inc'
5778 +SEQ,atoms.
5779 c include 'matters.inc'
5780 +SEQ,matters.
5781 c include 'crosec.inc'
5782 +SEQ,crosec.
5783
5784 c include 'cconst.inc'
5785 +SEQ,cconst.
5786 c include 'volume.inc'
5787 +SEQ,volume.
5788 c include 'part.inc'
5789 +SEQ,part.
5790 c include 'hist.inc'
5791 +SEQ,hist.
5792
5793
5794 c include 'random.inc'
5795 +SEQ,random.
5796
5797 c include 'hs.inc'
5798 +SEQ,hs.
5799
5800
5801
5802 integer qmol ! Quantity of different molecules
5803 ! in the gas mixture.
5804 integer nmol(pqMol) ! Their numbers from molecules.inc.
5805 ! Use only the named constants
5806 ! for compartibility with the future versions
5807 real pwmol(pqMol) ! Their weights
5808 ! (relative quantities of molecules).
5809 real ppres ! Pressure in Torr.
5810 real ptemp ! Temperature in K.
5811 real ptkener ! Kinetic energy of incident particle(MeV)
5812 real pmas ! Mass of incident particle(MeV)
5813 integer maxnum ! Maximum size of cluster(not used now).
5814 integer psoo ! Flag allowing to write.
5815 integer poo ! Output stream number.
5816 integer debug ! Flag allowing to write
5817 ! more amount of information.
5818
5819 c Output parameters:
5820 real density ! Density, calculated as for ideal gas, gr/cm3
5821 real dedx ! Mean dE/dx, mean energy loss, KeV/cm.
5822 real ntotal ! Average total number.
5823 real nclust ! number of clusters per cm.
5824 real clprob(msize) ! Probability of the clusters,
5825 ! Size=index.
5826 integer ierror ! Sign of error( 0 -- no error ).
5827
5828 real wmol(pqMol)
5829
5830 integer n,nc,i
5831 real s
5832
5833 real pres ! Pressure in Torr.
5834 real temp ! Temperature in K.
5835 real tkener ! Kinetic energy of incident particle.
5836 real mas ! Mass of incident particle.
5837
5838 real step_integ_ar
5839 integer tresh
5840 parameter (tresh=20)
5841 real e1,e2
5842
5843 integer nmat
5844 integer nat
5845
5846 c restore after previous run
5847
5848 do nat=1,pQAt
5849 Zat(nat)=0
5850 enddo
5851
5852 nmat=1
5853
5854 QAtMat(nmat)=0
5855
5856
5857
5858 c go ahead
5859
5860 s=0.0
5861 do n=1,qmol
5862 s=s+pwmol(n)
5863 enddo
5864 do n=1,qmol
5865 wmol(n)=pwmol(n)/s
5866 enddo
5867
5868
5869 call Iniranfl
5870
5871 soo=psoo
5872 oo=poo
5873 sret_err=1
5874
5875 sHist=0 ! To ban operating with historgams
5876 HistFile='heed.hist' ! To make sure. Histograms must not be filled
5877 ! and written here.
5878 maxhisampl=40.0e-3
5879 maxhisampl2=20.0e-3
5880 pqhisampl=100
5881 shfillrang=0
5882
5883 c Random number genarator
5884 sseed=0
5885 seed(1)=1121517854 ! this is example
5886 seed(2)=612958528
5887
5888
5889 qevt=1000 ! Quantity of events to generate
5890
5891 ssimioni=1 ! Simulate ionization loss
5892 ninfo=3 ! Number of first events with output listing
5893
5894 call Inishl ! Cascade from excited atom
5895
5896 call IniEner(150,3e-6,0.2) ! Energy mesh
5897 if(debug.ge.2)call PriEner
5898
5899 call AtomsByDefault ! Library of atoms
5900 *** Added argument to PriAtoms (RV 13/4/99)
5901 if(debug.ge.2)call PriAtoms(0)
5902 *** End of modification.
5903
5904 if(ppres.eq.0)then
5905 pres=Atm_Pressure
5906 else
5907 pres=ppres
5908 endif
5909
5910 if(ptemp.eq.0)then
5911 temp=Atm_Temper
5912 else
5913 temp=ptemp
5914 endif
5915
5916 call molecdef
5917 if(debug.ge.2)call Primolec
5918
5919 call Inigas(nmat, qmol, nmol, wmol, pres, temp)
5920 *** Added argument to PriMatter (RV 13/4/99).
5921 if(debug.ge.2)call PriMatter(0)
5922 *** End of modification.
5923 if(s_err.eq.1)then
5924 ierror=1
5925 return
5926 endif
5927 density=DensMat(nmat)
5928
5929 call IniFVolume(0, nmat, 1, 1, 0.0, 1.0 )
5930 if(debug.ge.2)call PriVolume
5931
5932 if(pmas.eq.0)then
5933 mas=938
5934 else
5935 mas=pmas
5936 endif
5937
5938 if(ptkener.eq.0)then
5939 tkener=mas*(4-1) ! 'mip'
5940 else
5941 tkener=ptkener
5942 endif
5943
5944 call IniPart(tkener,mas) ! Particle
5945 if(debug.ge.2)call Pripart
5946 if(s_err.eq.1)then
5947 ierror=1
5948 return
5949 endif
5950
5951 call IniRTrack(0.0, 0.0, 0.0, 0.0)
5952
5953 call IniCrosec ! Cross sections
5954 if(debug.ge.2)call PriCrosec(1,1)
5955
5956 call InisBdel ! Data for tracing of delta-electrons
5957
5958 meanprob=0.0
5959 meanvga=0.0
5960 meanvgal=0.0
5961 do i=1,msize
5962 prob(i)=0.0
5963 enddo
5964
5965
5966
5967 do nevt=1,qevt
5968
5969 call GoEvent
5970
5971 enddo
5972
5973
5974
5975 s=step_integ_ar
5976 + (ener,addaC(1,nmat),qener,0.0,ener(qener+1))
5977 s=s*XElDensMat(nmat)
5978
5979 do nc=1,msize
5980
5981 e1=WWW(nmat)*(nc-0.5)
5982 e2=WWW(nmat)*(nc+0.5)
5983 prob1(nc)=step_integ_ar
5984 + (ener,addaC(1,nmat),qener,e1,e2)
5985 prob1(nc)=prob1(nc)*XElDensMat(nmat)/s
5986
5987 enddo
5988
5989 dedx=meanC1(1)*1000.0
5990 ntotal=meaneleC1(1)
5991 nclust=meanvga
5992 do nc=1,tresh
5993 clprob(nc)=prob(nc)
5994 enddo
5995 do nc=tresh+1,msize
5996 clprob(nc)=prob1(nc)
5997 enddo
5998
5999 end
6000
6001 +DECK,UEventS,IF=SHEED.
6002 subroutine UBegEvent
6003
6004 implicit none
6005
6006 c include 'GoEvent.inc'
6007 +SEQ,GoEvent.
6008 c include 'volume.inc'
6009 +SEQ,volume.
6010
6011
6012
6013 end
6014
6015 subroutine UEndEvent
6016
6017 implicit none
6018
6019 c include 'GoEvent.inc'
6020 +SEQ,GoEvent.
6021 c include 'ener.inc'
6022 +SEQ,ener.
6023 c include 'atoms.inc'
6024 +SEQ,atoms.
6025 c include 'matters.inc'
6026 +SEQ,matters.
6027 c include 'volume.inc'
6028 +SEQ,volume.
6029 c include 'del.inc'
6030 +SEQ,del.
6031 c include 'cel.inc'
6032 +SEQ,cel.
6033 c include 'hs.inc'
6034 +SEQ,hs.
6035 c include 'lsgvga.inc'
6036 +SEQ,lsgvga.
6037
6038 integer i,j,k,n,nb
6039 integer nc,na,nq
6040 real s
6041
6042
6043 n=0
6044 if(qcel(1).eq.0)then
6045 goto 10
6046 endif
6047 nb=Ptdel(Ndelcel(1,1))
6048 k=0
6049 do nc=1,qcel(1)+1
6050 k=0
6051 if(nc.eq.qcel(1)+1)then
6052 k=1
6053 else
6054 if(nc.gt.1.and.Ptdel(Ndelcel(nc,1)).ne.nb)then
6055 k=1
6056 endif
6057 endif
6058 if(k.eq.1)then
6059 if(n.le.0)then
6060 write(oo,*)' n=',n
6061 n=1
6062 endif
6063 if(n.ge.msize+1)then
6064 write(oo,*)' n=',n
6065 n=msize
6066 endif
6067 prob(n)=prob(n)+1
6068 n=1
6069 if(nc.le.qcel(1))then
6070 nb=Ptdel(Ndelcel(nc,1))
6071 endif
6072 else
6073 n=n+1
6074 endif
6075 enddo
6076 meanprob=meanprob+qcel(1)
6077 meanvga=meanvga+qgvga(1)
6078 meanvgal=meanvgal+esgvga(1)
6079
6080 c write(oo,*)
6081 c + ' mean quantity of energy transfers from inc. part.= ',meanvga
6082 c write(oo,*)
6083 c + ' mean energy loss, Kev = ',
6084 c + meanvgal*1000.0
6085 c write(oo,*)
6086 c + ' mean number of conduction electrons = ',meanprob
6087
6088 10 continue
6089
6090 if(nevt.eq.qevt)then
6091 meanprob=meanprob/qevt
6092 meanvga=meanvga/qevt
6093 meanvgal=meanvgal/qevt
6094 s=0.0
6095 do n=1,msize
6096 s = s + prob(n)
6097 enddo
6098 do n=1,msize
6099 prob(n) = prob(n) / s
6100 enddo
6101
6102 c write(oo,*)
6103 c + ' mean quantity of energy transfers from inc. part.= ',meanvga
6104 c write(oo,*)
6105 c + ' mean energy loss, Kev = ',
6106 c + meanvgal*1000.0
6107 c write(oo,*)
6108 c + ' mean number of conduction electrons = ',meanprob
6109 c write(oo,*)
6110 c + ' number of conduction electrons in cluster vs probability:'
6111 c do n=1,200
6112 c write(oo,*)n,prob(n)
6113 c enddo
6114
6115
6116 endif
6117
6118
6119 end
6120 +DECK,PEHEED,IF=PEHEED.
6121 program PEHEED
6122
6123 c Checking the package EHEED
6124
6125 implicit none
6126
6127 c include 'molecules.inc'
6128 +SEQ,molecule.
6129 c include 'molecdef.inc'
6130 +SEQ,molecdef.
6131
6132
6133 integer qmol ! Quantity of different molecules
6134 ! in the gas mixture.
6135 integer nmol(pqMol) ! Their numbers from molecules.inc.
6136 ! Use only the named constants
6137 ! for compartibility with future versions.
6138 real wmol(pqMol) ! Their weights
6139 ! (relative quantities of molecules).
6140 real pres ! Pressure in Torr.
6141 real temp ! Temperature in K.
6142 real tkener ! Kinetic energy of incident particle(MeV).
6143 real mas ! Mass of incident particle(MeV)
6144 integer soo ! Flag allowed for writting.
6145 integer oo ! Output stream number.
6146 integer debug ! Flag allowed for writting of
6147 ! more amount of information.
6148
6149 integer qevt ! quantity of events to generate
6150 integer nevt ! current number of events
6151 ! (see comment in EHEED before GoEventn)
6152 c Output parameters:
6153 real density ! Density, calculated as for ideal gas, gr/cm3
6154 integer ierror ! Sign of error( 0 -- no error ).
6155
6156 integer n
6157
6158 write(6,*)' PEHEED started'
6159
6160 c qmol=1
6161
6162 c nmol(1)=numm_Ar
6163 c wmol(1)=1.0
6164 c nmol(1)=numm_CF4
6165 c wmol(1)=1.0
6166
6167 qmol=3
6168 nmol(1)=numm_Ar
6169 wmol(1)=0.30
6170 nmol(2)=numm_CO2
6171 wmol(2)=0.50
6172 nmol(3)=numm_CF4
6173 wmol(3)=0.20
6174
6175 pres=0.0
6176 temp=0.0
6177 tkener=0.0
6178 mas=0.0
6179
6180 soo=0
6181 oo=10
6182 open(oo,FILE='heed.out')
6183
6184 debug=2
6185
6186
6187 call IMHEED
6188 + (qmol, nmol, wmol, pres, temp, soo, oo, debug,
6189 + density, ierror)
6190 if(ierror.ne.0)then
6191 write(oo,*)' Error in IMHEED'
6192 stop
6193 endif
6194
6195 call IniFVolume(0, 1, 1, 1, 0.0, 1.0 ) ! Volume
6196
6197
6198 call IPHEED
6199 + (tkener, mas, debug,
6200 + ierror)
6201 if(ierror.ne.0)then
6202 write(oo,*)' Error in IMHEED'
6203 stop
6204 endif
6205
6206 call IniRTrack(0.0, 0.0, 0.0, 0.0) ! Track
6207
6208 write(oo,*)' density=',density
6209
6210 qevt=10
6211
6212 c End of initialization
6213 c Now the GoEvent subroutine can be called
6214 c from any place of user's program.
6215 c For example we just run several events and print ionization positions.
6216
6217 do nevt=1,qevt ! Loop over events
6218
6219 call GoEventn(nevt,qevt) ! Simulation of one event
6220 call PriCel ! Print to 'oo' device
6221
6222 enddo
6223
6224 end
6225
6226
6227 +DECK,EHEED,IF=EHEED.
6228 c Initialization of HEED for simulation event by event
6229 c with calls of HEED from another program.
6230 c Volumes and tracks are to be initialized by usual HEED routines:
6231 c IniFVolume, IniNVolume, and IniRTrack
6232
6233
6234 subroutine IMHEED
6235 + (qmol, nmol, pwmol, ppres, ptemp, psoo, poo, debug,
6236 + density, ierror)
6237 c
6238 c The subroutine for initialization of the medium.
6239 c Required are only information about matter.
6240 c Cross sections are to be initialized later, when the particle
6241 c velosity is fixed.
6242 c
6243 implicit none
6244
6245 c include 'GoEvent.inc'
6246 +SEQ,GoEvent.
6247 c include 'molecules.inc'
6248 +SEQ,molecule.
6249 c include 'molecdef.inc'
6250 +SEQ,molecdef.
6251
6252
6253 c include 'ener.inc'
6254 +SEQ,ener.
6255 c include 'atoms.inc'
6256 +SEQ,atoms.
6257 c include 'matters.inc'
6258 +SEQ,matters.
6259 c include 'crosec.inc'
6260 +SEQ,crosec.
6261
6262 c include 'cconst.inc'
6263 +SEQ,cconst.
6264 c include 'volume.inc'
6265 +SEQ,volume.
6266 c include 'part.inc'
6267 +SEQ,part.
6268 c include 'hist.inc'
6269 +SEQ,hist.
6270
6271
6272 c include 'random.inc'
6273 +SEQ,random.
6274 +SEQ,PRINTPLOT.
6275
6276
6277
6278 integer qmol ! Quantity of different molecules
6279 ! in the gas mixture.
6280 integer nmol(pqMol) ! Their numbers from molecules.inc.
6281 ! Use only the named constants
6282 ! for compartibility with the future versions
6283 real pwmol(pqMol) ! Their weights
6284 ! (relative quantities of molecules).
6285 real ppres ! Pressure in Torr.
6286 real ptemp ! Temperature in K.
6287 integer psoo ! Flag allowing to write.
6288 integer poo ! Output stream number.
6289 integer debug ! Flag allowing to write
6290 ! more amount of information.
6291
6292 c Output parameters:
6293 real density ! Density, calculated as for ideal gas, gr/cm3
6294 integer ierror ! Sign of error( 0 -- no error ).
6295
6296 real wmol(pqMol)
6297
6298 C integer nc
6299 integer n,i
6300 real s
6301
6302 real pres ! Pressure in Torr.
6303 real temp ! Temperature in K.
6304
6305 c real step_integ_ar
6306 integer tresh
6307 parameter (tresh=20)
6308 c real e1,e2
6309
6310 integer nmat
6311 integer nat
6312 *** Additional debug output (RV 13/8/98).
6313 IF(LDEBUG)THEN
6314 WRITE(LUNOUT,'('' ++++++ IMHEED DEBUG : '',
6315 - ''Pressure: '',F10.3,'' Torr''/26X,
6316 - ''Temperature: '',F10.3,'' K''/26X,
6317 - ''Gas components: '',I5/26X,
6318 - ''Identifier Fraction'')') ppres,ptemp,qmol
6319 DO I=1,qmol
6320 WRITE(LUNOUT,'(26X,I10,F12.4)') nmol(i),pwmol(i)
6321 ENDDO
6322 ENDIF
6323 *** End of modification.
6324
6325 c restore after previous run
6326
6327 do nat=1,pQAt
6328 Zat(nat)=0
6329 enddo
6330
6331 nmat=1
6332
6333 QAtMat(nmat)=0
6334
6335 c go ahead
6336
6337 s=0.0
6338 do n=1,qmol
6339 s=s+pwmol(n)
6340 enddo
6341 do n=1,qmol
6342 wmol(n)=pwmol(n)/s
6343 enddo
6344
6345
6346 call Iniranfl
6347
6348 soo=psoo
6349 oo=poo
6350 sret_err=1
6351
6352 sHist=0 ! To ban operating with historgams
6353 HistFile='heed.hist' ! To make sure. Histograms must not be filled
6354 ! and written here.
6355 maxhisampl=40.0e-3
6356 maxhisampl2=20.0e-3
6357 maxhisample=200
6358 pqhisampl=100
6359 shfillrang=0
6360
6361 c Random number genarator
6362 sseed=0
6363 seed(1)=1121517854 ! this is example
6364 seed(2)=612958528
6365
6366
6367 qevt=1 ! Quantity of events to generate
6368
6369 ssimioni=1 ! Simulate ionization loss
6370 ninfo=0 ! Number of first events with output listing
6371
6372 call Inishl ! Cascade from excited atom
6373
6374 call IniEner(150,3e-6,0.2) ! Energy mesh
6375 if(debug.ge.2)call PriEner
6376
6377 call AtomsByDefault ! Library of atoms
6378 *** Added argument to PriAtoms (RV 13/4/99)
6379 if(debug.ge.2)call PriAtoms(0)
6380 *** End of modification.
6381
6382 if(ppres.eq.0)then
6383 pres=Atm_Pressure
6384 else
6385 pres=ppres
6386 endif
6387
6388 if(ptemp.eq.0)then
6389 temp=Atm_Temper
6390 else
6391 temp=ptemp
6392 endif
6393
6394 call molecdef
6395 if(debug.ge.2)call Primolec
6396
6397 call Inigas(nmat, qmol, nmol, wmol, pres, temp)
6398 *** Added argument to PriMatter (RV 13/4/99).
6399 if(debug.ge.2)call PriMatter(0)
6400 *** End of modification.
6401 if(s_err.eq.1)then
6402 ierror=1
6403 return
6404 endif
6405 density=DensMat(nmat)
6406
6407 end
6408
6409
6410 subroutine IPHEED
6411 + (ptkener, pmas, debug,
6412 + ierror)
6413
6414 c Initialization of particle, cross sections,
6415 c and tracing of delta-electrons.
6416 c The volume(s) have to be initialized before!
6417
6418 implicit none
6419
6420 c include 'GoEvent.inc'
6421 +SEQ,GoEvent.
6422
6423 real ptkener ! Kinetic energy of incident particle.
6424 real pmas ! Mass of incident particle.
6425 ! In the case of zero in two above var. the following
6426 ! two ones will be sensible (see text).
6427 real tkener ! Kinetic energy of incident particle.
6428 real mas ! Mass of incident particle.
6429
6430 integer debug ! Flag allowing to write
6431 ! more amount of information.
6432
6433 c Output parameters:
6434 integer ierror ! Sign of error( 0 -- no error ).
6435
6436
6437 if(pmas.eq.0)then
6438 mas=938
6439 else
6440 mas=pmas
6441 endif
6442
6443 if(ptkener.eq.0)then
6444 tkener=mas*(4-1) ! 'mip'
6445 else
6446 tkener=ptkener
6447 endif
6448
6449 call IniPart(tkener,mas) ! Particle
6450 if(debug.ge.2)call Pripart
6451 if(s_err.eq.1)then
6452 ierror=1
6453 return
6454 endif
6455
6456 call IniCrosec ! Cross sections
6457 if(debug.ge.2)call PriCrosec(1,1)
6458
6459 call InisBdel ! Data for tracing of delta-electrons
6460
6461 end
6462
6463 c After that the track must still be initialized by IniRTrack.
6464
6465 c The UBegEvent end UEndEvent subroutine can be empty in this case.
6466
6467 subroutine UBegEvent
6468
6469 end
6470
6471 subroutine UEndEvent
6472
6473 end
6474
6475 c The GoEvent must know the number of the current event
6476 c and the total ordered event number. If there was an overflow
6477 c of any controlled array - arrays with delta-electrons,
6478 c conduction electrons, real photons, virtual photons,
6479 c the GoEvent prints the wornings and auxiliary information
6480 c to the 'oo' after the last event generated.
6481 c So as avoid of including of GoEvent.inc , where the event number
6482 c nevt and quantity of events qevt are stored, user can call GoEventn ,
6483 c that takes nevt and qevt as arguments and simulates ONE event.
6484
6485 subroutine GoEventn(pnevt, pqevt)
6486
6487 implicit none
6488
6489 c include 'GoEvent.inc'
6490 +SEQ,GoEvent.
6491 integer pnevt, pqevt
6492
6493 nevt = pnevt
6494 qevt = pqevt
6495
6496 call GoEvent
6497
6498 end
6499 +DECK,MainHEED,IF=E.
6500
6501
6502 program HEED
6503 c
6504 c The main program for HEED package
6505 c
6506 implicit none
6507
6508 integer NPW
6509 PARAMETER (NPW = 2000000)
6510 real H
6511 COMMON /PAWC/ H(NPW)
6512
6513 c include 'GoEvent.inc'
6514 +SEQ,GoEvent.
6515 c include 'volume.inc'
6516 +SEQ,volume.
6517 c include 'hist.inc'
6518 +SEQ,hist.
6519
6520
6521 CALL HLIMIT(NPW)
6522
6523 call Iniranfl ! Initialization of the counter of
6524 ! random number generator calls
6525 call IniHeed ! User's subroutine,
6526 ! Initialization of the detector
6527
6528 if(sHist.eq.1)then
6529 call IniHist ! Initialization of inbilt histograms
6530 endif
6531
6532
6533 do nevt=1,qevt ! Loop over events
6534
6535 call GoEvent ! Simulation of one event
6536
6537 enddo
6538
6539
6540
6541 if(sHist.eq.1)then
6542 call WHist ! Writting of histograms
6543 endif
6544
6545
6546 call Priranfl ! Print the number of calls of
6547 ! random number generator
6548 end
6549 +DECK,GoEvent.
6550
6551
6552 subroutine GoEvent
6553 c
6554 c Event processor. It is called from MainHEED.
6555 c
6556 implicit none
6557
6558 c include 'GoEvent.inc'
6559 +SEQ,GoEvent.
6560 c include 'abs.inc'
6561 +SEQ,abs.
6562 c include 'rga.inc'
6563 +SEQ,rga.
6564 c include 'volume.inc'
6565 +SEQ,volume.
6566 c include 'hist.inc'
6567 +SEQ,hist.
6568 c include 'random.inc'
6569 +SEQ,random.
6570
6571 integer iempty
6572
6573
6574 c if(nevt.le.ninfo)then
6575 if(soo.eq.1)then
6576 write(oo,*)
6577 write(oo,*)' Event number ',nevt
6578 endif
6579 if(nevt.eq.1.and.sseed.eq.1)then
6580 call randset ! Set the start point of
6581 endif ! the random number generator.
6582 if(soo.eq.1)then
6583 call randget
6584 call randpri(oo) ! Print the current point of
6585 endif ! the random number generator.
6586 c endif
6587
6588 call IniNTrack ! Generate the next track.
6589 if(nevt.le.ninfo)then
6590 call PriMTrack(0) ! Print debug information
6591 call PriMTrack(1)
6592 call PriMTrack(2)
6593 call PriMTrack(3)
6594 call PriMTrack(4)
6595 endif
6596
6597 call IniLsgvga ! Initialize gvga.inc
6598 call Iniabs ! Initialize abs.inc
6599 call Inirga ! Initialize rga.inc
6600 call Inidel ! Initialize del.inc
6601 call Inicel ! Initialize cel.inc
6602
6603 call UBegEvent ! User's subroutine
6604
6605 if(ssimioni.eq.1)call rafflev ! Generate the primary energy transfers
6606 ! from incoming particle
6607
6608 if(soo.eq.1)then
6609 if(nevt.le.ninfo)then
6610 write(oo,*)
6611 call PriLsgvga ! Print debug information
6612 endif
6613 endif
6614
6615 do iempty=1,10000
6616
6617 if(soo.eq.1)then
6618 if(nevt.le.ninfo)then
6619 write(oo,*)
6620 write(oo,*)' before absorption of virtual photons:'
6621 call Priabs ! Print debug information
6622
6623 endif
6624 endif
6625
6626 call AbsGam ! Absorb the virtual photons
6627
6628 if(soo.eq.1)then
6629 if(nevt.le.ninfo)then ! Print debug information
6630 write(oo,*)
6631 write(oo,*)' after absorption of virtual photons:'
6632
6633 c call Priabs
6634 call Prirga
6635 call Pridel
6636
6637 endif
6638 endif
6639
6640 call GoGam ! Absorb the photons
6641
6642 if(soo.eq.1)then
6643 if(nevt.le.ninfo)then ! Print debug information
6644 write(oo,*)
6645 write(oo,*)' after absorption of photons:'
6646
6647 call Priabs
6648 c call Prirga
6649 call PrirgaF
6650
6651 endif
6652 endif
6653
6654 if(ctagam.gt.qtagam.and.crga.gt.qrga)then
6655 ! There are neither real no
6656 ! virtual photons to trace.
6657 goto 50 ! Exit the loop.
6658 endif
6659
6660 enddo
6661
6662 50 continue
6663
6664
6665 call treatdel ! Trace the delta-electrons
6666 ! and generate the conduction electrons.
6667 call treatcel ! Treat the cel.inc
6668 if(soo.eq.1)then
6669 if(nevt.le.ninfo)then ! since there are calculation of ranges
6670 ! which in wroute to del inside treatdel
6671 write(oo,*)
6672 call Pridel
6673 c call Pricel
6674 endif
6675 endif
6676
6677 if(sHist.eq.1)then
6678 call Fhist ! Fill predetermined histograms
6679 endif
6680
6681 call UEndEvent ! User's routine
6682
6683 if(soo.eq.1)then
6684 if(nevt.eq.qevt)then
6685 write(oo,*)
6686 write(oo,*)nevt,' events is done'
6687 ! Printing the wornings about overful
6688 call WorPrirga
6689 call WorPriabs
6690 call WorPridel
6691 call WorPricel
6692
6693 endif
6694 endif
6695
6696
6697 end
6698 +DECK,IniHeed1,IF=E1.
6699
6700
6701
6702 subroutine IniHeed
6703 c
6704 c The program for estimation of the
6705 c ultimate coordinate resolution of the proportional chamber
6706 c
6707 c Also the table of clusters number distribution may be generated.
6708 c
6709
6710 implicit none
6711
6712 c include 'GoEvent.inc'
6713 +SEQ,GoEvent.
6714 c include 'hist.inc'
6715 +SEQ,hist.
6716
6717 c include 'ener.inc'
6718 +SEQ,ener.
6719 c include 'atoms.inc'
6720 +SEQ,atoms.
6721 c include 'matters.inc'
6722 +SEQ,matters.
6723
6724 c include 'molecules.inc'
6725 +SEQ,molecule.
6726
6727 c include 'cconst.inc'
6728 +SEQ,cconst.
6729 c include 'volume.inc'
6730 +SEQ,volume.
6731 c include 'part.inc'
6732 +SEQ,part.
6733 c include 'h1.inc'
6734 +SEQ,h1.
6735 c include 'random.inc'
6736 +SEQ,random.
6737
6738 real tkener,mas,momentum
6739 integer qmol,nmol(3)
6740 real wmol(3)
6741
6742 integer i
6743 integer j
6744
6745
6746 real ystart, an, wid ! the last is widht of the chamber
6747 ! the angle
6748 ! it is calculated from two next values so as
6749 ! the middle was on zero
6750
6751 real amc
6752 integer na
6753
6754
6755 write(6,*)' Initialization started'
6756 soo=1 ! To allow (1) or to ban (0) printing to stream oo.
6757 oo=10 ! set logical number of output stream.
6758 TaskName='heed01_2.'
6759 OutputFile=TaskName//'out'
6760 open(oo,FILE=OutputFile) ! open output disk file.
6761
6762 sret_err = 0 ! Stop if error is detected
6763
6764 c Auxiliary variables for histograms (from hist.inc)
6765 sHist=1 ! To allow (1) or to ban (0) dealing with histograms.
6766 HistFile=TaskName//'hist' ! File name, where they are written to.
6767 maxhisampl=40.0e-3 ! Maximum aplitude.
6768 maxhisampl2=20.0e-3 ! Reduced maximum aplitude.
6769 maxhisample=150 ! Maximum aplitude in unit of number of elect.
6770 pqhisampl=100 ! Number of bins.
6771 shfillrang=1 ! To allow (1) or to ban (0) filling histogram nh2_rd.
6772
6773
6774 c Random number genarator
6775 sseed=0 ! To make the generator start from seed point (1)
6776 ! or from default point (0).
6777 seed(1)=1121517854 ! this is example for sseed=1
6778 seed(2)=612958528
6779
6780
6781 qevt=1000 ! Quantity of events to generate
6782
6783 ssimioni=1 ! To allow ionization loss (1) or to ban it (0)
6784 ninfo=0 ! Number of first events with output listing
6785
6786
6787
6788
6789
6790
6791
6792
6793 call Inishl ! Cascade from excited atom
6794
6795 call IniEner(150,3e-6,0.2) ! Energy mesh
6796
6797 c call PriEner
6798
6799 call AtomsByDefault ! Library of atoms
6800 c call PriAtoms(0)
6801
6802 Cur_Pressure=Atm_Pressure
6803 Cur_Temper=Atm_Temper
6804
6805 c call Xenon_dens_Ar (1) ! Materials from LibAtMat
6806 c call Textolite (2)
6807 c call CF4 (1)
6808 c call CF4_without_cor (1)
6809 c call lCO2 (1)
6810 c call CO2_without_cor (1)
6811 c call CO250CF420Ar30(1)
6812 c call Ar80C2H620(1)
6813 c call lArgon (1)
6814 c call Ar93CH407 (1)
6815 c call Oxigen (1)
6816 c call Kripton (1)
6817
6818 call molecdef
6819 c call Primolec
6820
6821
6822 qmol=3
6823 nmol(1)=numm_Ar
6824 wmol(1)=0.30
6825 nmol(2)=numm_CO2
6826 wmol(2)=0.50
6827 nmol(3)=numm_CF4
6828 wmol(3)=0.20
6829
6830 call Inigas( 1, qmol, nmol, wmol, Cur_Pressure, Cur_Temper)
6831
6832 c call PriMatter(0)
6833
6834
6835
6836
6837 wid=1.0 ! width of layer.
6838
6839 call IniFVolume(0, 1, 1, 1, 0.0, wid )
6840
6841 call PriVolume
6842
6843
6844 c mas=105.0 ! muon
6845 mas=938 ! proton
6846 c momentum=100000.0
6847 c tkener=sqrt(mas*mas+momentum*momentum)-mas
6848 tkener = mas * (4-1) ! 'mip'
6849
6850 call IniPart(tkener,mas) ! Particle
6851 call PriPart
6852
6853 c The special iinitialization for track
6854
6855 c an=30.0
6856 an=0.0
6857 an=an * 2.0 * PI / 360.0 ! go from grad to radians
6858 ystart = wid*tan(an)/2
6859
6860 call IniRTrack(-ystart, -ystart, an, real(PI/2.0)) ! Track
6861 c call PriTrack
6862
6863 call IniCrosec ! Cross sections
6864 call PriCrosec(1,1)
6865
6866
6867 call InisBdel ! Data for tracing of delta-electrons
6868
6869
6870
6871
6872
6873 c Additional histograms
6874
6875 hhis=mhis/qhis
6876
6877 qamp=5
6878 c ampc(1)=10.0
6879 c ampc(2)=30.0
6880 c ampc(3)=100.0
6881 c ampc(4)=300.0
6882 c ampc(5)=10000000.0
6883 c amc=19.82
6884 amc=22.29
6885 c amc=49.32
6886 c amc=49.32 * 2
6887 ampc(1)=amc
6888 ampc(2)=2*amc
6889 ampc(3)=3*amc
6890 ampc(4)=5*amc
6891 ampc(5)=10000000.0
6892
6893 write(oo,*)' ampc=',ampc
6894
6895
6896 qe=0
6897
6898 do na=1,qamp
6899 do j=1,qhis
6900 do i=1,2
6901 npp(j,i,na)=0
6902 pp1(j,i,na)=0.0
6903 pp2(j,i,na)=0.0
6904 enddo
6905 enddo
6906 enddo
6907
6908 do na=1,qamp
6909 do i=1,2 ! distribution of the centers of gravity
6910 ! of ionization along x (1) and y (2)
6911 call hbook1(30000+10*na+(i-1)+1,' $',
6912 + 2*qhis,-mhis,mhis,0.0)
6913 enddo
6914 do i=3,6
6915 call hbook1(30000+10*na+(i-1)+1,' $',
6916 + qhis,0.0,mhis,0.0)
6917 enddo
6918 enddo
6919 meanprob=0.0
6920 meanvga=0.0
6921 meanvgal=0.0
6922 do i=1,1000
6923 prob(i)=0.0
6924 enddo
6925
6926
6927 write(6,*)' Initialization finished'
6928
6929 end
6930
6931
6932
6933 +DECK,UEvent1,IF=E1.
6934
6935
6936
6937 subroutine UBegEvent
6938
6939 implicit none
6940
6941 c include 'GoEvent.inc'
6942 +SEQ,GoEvent.
6943
6944
6945 end
6946
6947 subroutine UEndEvent
6948
6949 implicit none
6950
6951 c include 'GoEvent.inc'
6952 +SEQ,GoEvent.
6953 c include 'ener.inc'
6954 +SEQ,ener.
6955 c include 'atoms.inc'
6956 +SEQ,atoms.
6957 c include 'matters.inc'
6958 +SEQ,matters.
6959 c include 'volume.inc'
6960 +SEQ,volume.
6961 c include 'del.inc'
6962 +SEQ,del.
6963 c include 'cel.inc'
6964 +SEQ,cel.
6965 c include 'h1.inc'
6966 +SEQ,h1.
6967 c include 'lsgvga.inc'
6968 +SEQ,lsgvga.
6969
6970 integer i,j,k,n,nb
6971 integer nc,na,nq
6972 real s,sz
6973 real*8 p(2) ! coordinates of center of gravity
6974 ! along x and y for current event.
6975 real x
6976
6977
6978 do i=1,2
6979 p(i)=0.0
6980 enddo
6981 nq=0
6982 sz=0.0
6983 do nc=1,qcel(1)
6984
6985 nq=nq+1
6986 sz=sz+1
6987 do i=1,2
6988 p(i)=p(i)+pntcel(i,nc,1)*10000.0
6989 enddo
6990
6991 enddo
6992
6993 if(nq.gt.0)then
6994
6995 qe=qe+1
6996
6997 do i=1,2
6998 p(i)=p(i)/nq
6999 enddo
7000 do na=1,qamp
7001 if(sz.le.ampc(na))then
7002 call hfill(30000+10*na+1,real(p(1)),0.0,1.0)
7003 call hfill(30000+10*na+2,real(p(2)),0.0,1.0)
7004 endif
7005 enddo
7006 do na=1,qamp
7007 if(sz.le.ampc(na))then ! amplitude cut
7008 do j=1,qhis
7009 x=hhis*j
7010 do i=1,2
7011 if(abs(p(i)).le.x)then ! coordinate cut
7012 npp(j,i,na)=npp(j,i,na)+1
7013 pp1(j,i,na)=pp1(j,i,na)+p(i)
7014 pp2(j,i,na)=pp2(j,i,na)+p(i)*p(i)
7015 endif
7016 enddo
7017 enddo
7018 endif
7019 enddo
7020
7021 endif
7022
7023 n=0
7024 if(qcel(1).eq.0)then
7025 goto 10
7026 endif
7027 nb=Ptdel(Ndelcel(1,1))
7028 k=0
7029 do nc=1,qcel(1)+1
7030 k=0
7031 if(nc.eq.qcel(1)+1)then
7032 k=1
7033 else
7034 if(nc.gt.1.and.Ptdel(Ndelcel(nc,1)).ne.nb)then
7035 k=1
7036 endif
7037 endif
7038 if(k.eq.1)then
7039 if(n.le.0)then
7040 write(oo,*)' n=',n
7041 n=1
7042 endif
7043 if(n.ge.1001)then
7044 write(oo,*)' n=',n
7045 n=1000
7046 endif
7047 prob(n)=prob(n)+1
7048 n=1
7049 if(nc.le.qcel(1))then
7050 nb=Ptdel(Ndelcel(nc,1))
7051 endif
7052 else
7053 n=n+1
7054 endif
7055 enddo
7056 meanprob=meanprob+qcel(1)
7057 meanvga=meanvga+qgvga(1)
7058 meanvgal=meanvgal+esgvga(1)
7059
7060 10 continue
7061
7062 if(nevt.eq.qevt)then
7063 meanprob=meanprob/qevt
7064 meanvga=meanvga/qevt
7065 meanvgal=meanvgal/qevt
7066 s=0.0
7067 do n=1,1000
7068 s = s + prob(n)
7069 enddo
7070 do n=1,1000
7071 prob(n) = prob(n) / s
7072 enddo
7073
7074 write(oo,*)
7075 + ' mean quantity of energy transfers from inc. part.= ',meanvga
7076 write(oo,*)
7077 + ' mean energy loss, Kev = ',
7078 + meanvgal*1000.0
7079 write(oo,*)
7080 + ' mean number of conduction electrons = ',meanprob
7081 write(oo,*)
7082 + ' number of conduction electrons in cluster vs probability:'
7083 do n=1,200
7084 write(oo,*)n,prob(n)
7085 enddo
7086
7087 c do na=1,qamp
7088 c do j=1,qhis
7089 c do i=1,2
7090 c write(oo,*)' pp:',j,i,na,npp(j,i,na),pp1(j,i,na),pp2(j,i,na)
7091 c enddo
7092 c enddo
7093 c enddo
7094
7095 do na=1,qamp
7096 do j=1,qhis
7097 do i=1,2
7098 if(npp(j,i,na).gt.0)then
7099 pp1(j,i,na)=pp1(j,i,na)/npp(j,i,na)
7100 pp2(j,i,na)=pp2(j,i,na)/npp(j,i,na)
7101 pp1(j,i,na)=sqrt(pp2(j,i,na)-pp1(j,i,na)*pp1(j,i,na))
7102 else
7103 pp1(j,i,na)=0.0
7104 endif
7105 enddo
7106 enddo
7107 enddo
7108
7109 do na=1,qamp
7110 do j=1,qhis
7111 do i=1,2
7112 rpp1(j,i,na)=pp1(j,i,na)
7113 enddo
7114 enddo
7115 enddo
7116
7117 do na=1,qamp
7118 do i=1,2
7119 call hpak(30002+10*na+i,rpp1(1,i,na))
7120 enddo
7121 enddo
7122
7123 do na=1,qamp
7124 do j=1,qhis
7125 do i=1,2
7126 rpp2(j,i,na)=qe-npp(j,i,na)
7127 enddo
7128 enddo
7129 enddo
7130
7131 do na=1,qamp
7132 do i=1,2
7133 call hpak(30004+10*na+i,rpp2(1,i,na))
7134 enddo
7135 enddo
7136
7137 write(6,*)' The program finished'
7138
7139 endif
7140
7141
7142 end
7143 +DECK,IniEner.
7144 SUBROUTINE IniEner(q,emin,emax)
7145 C
7146 c define the energy mesh for ionization loss
7147 c and photoabsorbtion
7148 c
7149 implicit none
7150
7151 c include 'ener.inc'
7152 +SEQ,ener.
7153 C
7154 integer q
7155 real emin,emax
7156
7157
7158 qener=q
7159 call logscale(q,emin,emax,ener,enerc)
7160
7161 END
7162
7163 subroutine PriEner
7164
7165 c include 'GoEvent.inc'
7166 +SEQ,GoEvent.
7167 c include 'ener.inc'
7168 +SEQ,ener.
7169
7170 integer i
7171
7172 if(soo.eq.0)return
7173 write(oo,*)
7174 write(oo,*)' PriEner: Energy mesh'
7175 write(oo,*)' qener=',qener
7176 write(oo,*)' ener, left edges enerc, the centers (MeV)'
7177 do i=1,qener
7178 write(oo,*)ener(i),enerc(i)
7179 enddo
7180
7181 end
7182 +DECK,logscale.
7183 subroutine logscale(q,xmin,xmax,x,xc)
7184 c
7185 c Make a logariphmic mesh.
7186 c
7187 implicit none
7188 integer q
7189 real xmin,xmax
7190 real x(*),xc(*)
7191
7192 real rk,xr
7193 integer i
7194 rk=(xmax/xmin)**(1.0/q)
7195 xr=xmin
7196 x(1)=xr
7197
7198 do i=2,q+1
7199 x(i)=xr*rk
7200 xc(i-1)=(x(i-1)+x(i))*0.5
7201 xr=x(i)
7202 enddo
7203
7204 end
7205
7206 subroutine logscale0(q,xmin,xmax,x,xc)
7207 c
7208 c Make a logariphmic mesh with linear begin.
7209 c First, the logariohmic scale is calculated.
7210 c Second, the program tries to prolong it to zero
7211 c with the same number of points.
7212 c So several points of begin of logariphmic scale will be recalculeted.
7213 c
7214 implicit none
7215 integer q
7216 real xmin,xmax
7217 real x(*),xc(*)
7218 integer i,j
7219 real r,h
7220
7221 call logscale(q,xmin,xmax,x,xc)
7222
7223 if(q.ge.2)then
7224
7225 do i=2,q
7226 r = x(i) / ( x(i+1) - x(i) )
7227 if( r .le. i-1 )then
7228 h = x(i) / ( i - 1 )
7229 x(1) = 0.0
7230 do j = 2,i
7231 x(j) = h * ( j - 1 )
7232 xc(j-1) = (x(j) + x(j-1))*0.5
7233 enddo
7234 go to 10
7235 endif
7236 enddo
7237 write(6,*)' error in logscale0'
7238 stop
7239
7240 else
7241
7242 write(6,*)' error in logscale0'
7243 stop
7244
7245 endif
7246
7247 10 end
7248 +DECK,Inishl.
7249
7250
7251
7252 subroutine Inishl
7253
7254 c Initialize common comshl
7255 c It will be very difficult
7256 c Modifying is the best way to loss your temper
7257 c Description of channels of getting exiting from atom
7258 c after photoabsorbtion and electron emission
7259
7260 implicit none
7261
7262 c include 'shl.inc'
7263 +SEQ,shl.
7264
7265 integer n
7266
7267 c qatm=0 !nahui!
7268 qatm=2
7269
7270 c Argon
7271 charge(1)=18
7272 qshl(1)=5
7273 eshell(1,1)=.3178E-2
7274 eshell(2,1)=.3135E-3
7275 eshell(3,1)=.2479E-3
7276 eshell(4,1)=.2892E-4
7277 eshell(5,1)=.1449E-4
7278 qschl(1,1)=2
7279 qschl(2,1)=2
7280 qschl(3,1)=2
7281 qschl(4,1)=0
7282 qschl(5,1)=0
7283 secprobch(1,1,1)=0.878
7284 secprobch(2,1,1)=1.0
7285 secprobch(1,2,1)=0.999
7286 secprobch(2,2,1)=1.0
7287 secprobch(1,3,1)=0.999
7288 secprobch(2,3,1)=1.0
7289 qsel(1,1,1)=1
7290 qsga(1,1,1)=0
7291 qsel(2,1,1)=0
7292 qsga(2,1,1)=1
7293 qsel(1,2,1)=1
7294 qsga(1,2,1)=0
7295 qsel(2,2,1)=0
7296 qsga(2,2,1)=1
7297 qsel(1,3,1)=1
7298 qsga(1,3,1)=0
7299 qsel(2,3,1)=0
7300 qsga(2,3,1)=1
7301 secenel(1,1,1,1)=eshell(1,1)-2.0*eshell(5,1)
7302 secenga(1,2,1,1)=eshell(1,1)-eshell(5,1)
7303 secenel(1,1,2,1)=eshell(2,1)-2.0*eshell(5,1)
7304 secenga(1,2,2,1)=eshell(2,1)-eshell(5,1)
7305 secenel(1,1,3,1)=eshell(3,1)-2.0*eshell(5,1)
7306 secenga(1,2,3,1)=eshell(3,1)-eshell(5,1)
7307
7308 c Xenon
7309 n=2
7310 charge(n)=54
7311 qshl(n)=6
7312 eshell(1,n)=0.041328
7313 c eshell(2,n)=0.006199
7314 eshell(2,n)=0.0041
7315 eshell(3,n)=0.000827
7316 eshell(4,n)=0.00031
7317 eshell(5,n)=8.265694e-05
7318 eshell(6,n)=1.239854e-05
7319 qschl(1,n)=2
7320 qschl(2,n)=2
7321 qschl(3,n)=0
7322 qschl(4,n)=0
7323 qschl(5,n)=0
7324 qschl(6,n)=0
7325 secprobch(1,1,n)=0.106
7326 secprobch(2,1,n)=1.0
7327 secprobch(1,2,n)=0.897
7328 secprobch(2,2,n)=1.0
7329 qsel(1,1,n)=1
7330 qsga(1,1,n)=0
7331 qsel(2,1,n)=0
7332 qsga(2,1,n)=1
7333 qsel(1,2,n)=1
7334 qsga(1,2,n)=0
7335 qsel(2,2,n)=0
7336 qsga(2,2,n)=1
7337 secenel(1,1,1,n)=eshell(1,n)-2.0*eshell(6,n)
7338 secenga(1,2,1,n)=eshell(1,n)-eshell(6,n)
7339 secenel(1,1,2,n)=eshell(2,n)-2.0*eshell(6,n)
7340 secenga(1,2,2,n)=eshell(2,n)-eshell(6,n)
7341
7342
7343 end
7344
7345
7346
7347
7348
7349 subroutine Prishl
7350
7351 c print the featcher of the mater
7352
7353 implicit none
7354
7355 c include 'GoEvent.inc'
7356 +SEQ,GoEvent.
7357 c include 'shl.inc'
7358 +SEQ,shl.
7359
7360 integer iatm, ishl, ischl, isel, isga
7361
7362 if(soo.eq.0)return
7363 write(oo,*)
7364 write(oo,*)' Prishl: print materials '
7365 write(oo,*)' qatm=',qatm
7366 do iatm=1,qatm
7367 write(oo,*)' ****atom=',iatm
7368 write(oo,*)' charge()=',charge(iatm),
7369 + ' qshl(iatm)= ',qshl(iatm)
7370 do ishl=1,qshl(iatm)
7371 write(oo,*)' ----number of shell=',ishl
7372 write(oo,*)' eshell(ishl,iatm)=',eshell(ishl,iatm),
7373 + ' qschl(ishl,iatm)=',qschl(ishl,iatm)
7374 do ischl=1,qschl(ishl,iatm)
7375 write(oo,*)' ------number of channel=',ischl
7376 write(oo,*)' qsel(ischl,ishl,iatm)=',qsel(ischl,ishl,iatm),
7377 + ' qsga(ischl,ishl,iatm)=',qsga(ischl,ishl,iatm)
7378 do isel=1,qsel(ischl,ishl,iatm)
7379 write(oo,*)' -------- electron number ',isel
7380 write(oo,*)' secenel(isel,ischl,ishl,iatm)=',
7381 + secenel(isel,ischl,ishl,iatm)
7382 enddo
7383 do isga=1,qsga(ischl,ishl,iatm)
7384 write(oo,*)' -------- photon number ',isga
7385 write(oo,*)' secenga(isga,ischl,ishl,iatm)=',
7386 + secenga(isga,ischl,ishl,iatm)
7387 enddo
7388 enddo
7389 enddo
7390 enddo
7391
7392
7393 end
7394 +DECK,LibAtMat.
7395 subroutine AtomsByDefault
7396 c
7397 c Initializations of several atoms
7398 c
7399 implicit none
7400
7401 c include 'ener.inc'
7402 +SEQ,ener.
7403 c include 'atoms.inc'
7404 +SEQ,atoms.
7405 c include 'LibAtMat.inc'
7406 +SEQ,LibAtMat.
7407
7408 c integer na
7409
7410 KeyTeor=0
7411 QseqAt=0 ! It is necessary before run IniAtom
7412 ! ( if memory is not cleaned automatically).
7413 c do na=1,pQAt
7414 c num_at_mol(na)=0
7415 c enddo
7416
7417
7418 call IniAtom(num_H , 1, 1.0 ) ! H
7419 call IniAtom(num_H3 , 1, 1.0 ) ! H in CH4
7420 call IniAtom(num_H4 , 1, 1.0 ) ! H in NH3
7421 call IniAtom(num_He , 2, 4.0 ) ! He
7422 call IniAtom(num_Li , 3, 6.94) ! Li
7423 call IniAtom(num_C , 6, 12.01) ! C
7424 c num_at_mol(num_C1)=1
7425 call IniAtom(num_C1 , 6, 12.01) ! C in CO2
7426 c num_at_mol(num_C2)=2
7427 call IniAtom(num_C2 , 6, 12.01) ! C in CF4
7428 call IniAtom(num_C3 , 6, 12.01) ! C in CH4
7429 call IniAtom(num_N , 7, 14.01) ! N
7430 call IniAtom(num_O , 8, 16.0 ) ! O
7431 call IniAtom(num_F , 9, 19.0 ) ! F
7432 call IniAtom(num_Ne , 10, 20.2 ) ! Ne
7433 call IniAtom(num_Al , 13, 26.98) ! Al
7434 call IniAtom(num_Si , 14, 28.09) ! Si
7435 call IniAtom(num_Ar , 18, 40.0 ) ! Ar
7436 call IniAtom(num_Kr , 36, 84.0 ) ! Kr
7437 call IniAtom(num_Xe , 54, 131.3 ) ! Xe
7438 *** Additions (RV, 20/9/99).
7439 call IniAtom(num_S , 16, 32.066) ! S
7440
7441 end
7442 +DECK,HELIUM,IF=NEVER.
7443 subroutine Helium(nm)
7444 c
7445 c Initialization of Matter
7446 c
7447 implicit none
7448
7449 integer nm
7450 c include 'LibAtMat.inc'
7451 +SEQ,LibAtMat.
7452
7453 integer A(10)
7454 real AW(10)
7455 integer q
7456 real Ad(10),AWd(10)
7457 integer qd
7458 real dens
7459 real gasdens
7460
7461 q=1 ! Helium
7462 A(1)=num_He
7463 AW(1)=1
7464
7465 qd=1
7466 Ad(1)=4.0
7467 AWd(1)=1
7468 dens=gasdens(Ad,AWd,qd)
7469 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
7470
7471 end
7472 +DECK,AIR,IF=NEVER.
7473 subroutine Air(nm)
7474 c
7475 c Initialization of Matter
7476 c
7477 implicit none
7478
7479 integer nm
7480 c include 'LibAtMat.inc'
7481 +SEQ,LibAtMat.
7482
7483 integer A(10)
7484 real AW(10)
7485 integer q
7486 real Ad(10),AWd(10)
7487 integer qd
7488 real dens
7489 real gasdens
7490
7491 q=2 ! Air
7492 A(1)=num_N ! N
7493 AW(1)=0.7
7494 A(2)=num_O ! O
7495 AW(1)=0.3
7496
7497 qd=2
7498 Ad(1)=28.02
7499 AWd(1)=0.7
7500 Ad(2)=32
7501 AWd(2)=0.3
7502 dens=gasdens(Ad,AWd,qd)
7503 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
7504
7505 end
7506 +DECK,LDME,IF=NEVER.
7507 SUBROUTINE LDME(NM)
7508 *-----------------------------------------------------------------------
7509 * LDME - Initialises DME data
7510 * (Last changed on 18/ 2/97.)
7511 *-----------------------------------------------------------------------
7512 implicit none
7513 +SEQ,LibAtMat.
7514 INTEGER A(10),Q,NM
7515 REAL AW(10),WORK,FANO,DENS
7516 *** Composition.
7517 Q=3
7518 A(1)=num_H
7519 AW(1)=6
7520 A(2)=num_O
7521 AW(2)=1
7522 A(3)=num_C3
7523 AW(3)=2
7524 *** Density.
7525 DENS=0.00191
7526 *** Work for a pair [MeV].
7527 WORK=30E-6
7528 *** Fano factor.
7529 FANO=0.19
7530 *** Initialise.
7531 CALL IniMatter(NM,A,AW,Q,DENS,WORK,FANO)
7532 END
7533 +DECK,N2O69,IF=NEVER.
7534 subroutine N2_0_69Torr(nm)
7535 c
7536 c N2 with presure 0.69 Torr
7537 c Initialization of Matter
7538 c
7539 implicit none
7540
7541 integer nm
7542 c include 'LibAtMat.inc'
7543 +SEQ,LibAtMat.
7544
7545 integer A(10)
7546 real AW(10)
7547 integer q
7548 real Ad(10),AWd(10)
7549 integer qd
7550 real dens
7551 real gasdens
7552
7553 q=1 ! N
7554 A(1)=num_N ! N2
7555 AW(1)=1
7556 qd=1
7557 Ad(1)=2*14.0
7558 AWd(1)=1.0
7559 dens = gasdens(Ad,AWd,qd)
7560 dens = dens * (0.69/760.0)
7561 c dens = dens * (2.8/760.0)
7562 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
7563
7564 end
7565 +DECK,OXIGEN,IF=NEVER.
7566 subroutine Oxigen(nm)
7567 c
7568 c Initialization of Matter
7569 c
7570 implicit none
7571
7572 integer nm
7573 c include 'LibAtMat.inc'
7574 +SEQ,LibAtMat.
7575
7576 integer A(10)
7577 real AW(10)
7578 integer q
7579 real Ad(10),AWd(10)
7580 integer qd
7581 real dens
7582 real gasdens
7583
7584 q=1 ! O
7585 A(1)=num_O ! O2
7586 AW(1)=1
7587 qd=1
7588 Ad(1)=2*16.0
7589 AWd(1)=1.0
7590 dens=gasdens(Ad,AWd,qd)
7591 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
7592
7593 end
7594 +DECK,LCO2,IF=NEVER.
7595 subroutine lCO2(nm)
7596 c
7597 c Initialization of Matter
7598 c
7599 implicit none
7600
7601 integer nm
7602 c include 'LibAtMat.inc'
7603 +SEQ,LibAtMat.
7604
7605 integer A(10)
7606 real AW(10)
7607 integer q
7608 real Ad(10),AWd(10)
7609 integer qd
7610 real dens
7611 real gasdens
7612
7613 q=2 ! CO2
7614 A(1)=num_C1 ! C
7615 AW(1)=0.30
7616 A(2)=num_O ! O2
7617 AW(2)=0.60
7618 qd=1
7619 Ad(1) = 12.01 + 2*16.0
7620 AWd(1)= 1
7621 dens=gasdens(Ad,AWd,qd)
7622 call IniMatter(nm,A,AW,q,dens,33.0e-6,0.19)
7623
7624 end
7625 +DECK,CO2WITHOUT,IF=NEVER.
7626 subroutine CO2_without_cor(nm)
7627 c
7628 c Initialization of Matter
7629 c
7630 implicit none
7631
7632 integer nm
7633 c include 'LibAtMat.inc'
7634 +SEQ,LibAtMat.
7635
7636 integer A(10)
7637 real AW(10)
7638 integer q
7639 real Ad(10),AWd(10)
7640 integer qd
7641 real dens
7642 real gasdens
7643
7644 q=2 ! CO2
7645 A(1)=num_C ! C
7646 AW(1)=0.30
7647 A(2)=num_O ! O2
7648 AW(2)=0.60
7649 qd=1
7650 Ad(1) = 12.01 + 2*16.0
7651 AWd(1)= 1
7652 dens=gasdens(Ad,AWd,qd)
7653 call IniMatter(nm,A,AW,q,dens,33.0e-6,0.19)
7654
7655 end
7656 +DECK,CF4,IF=NEVER.
7657 subroutine CF4(nm)
7658 c
7659 c Initialization of Matter
7660 c
7661 implicit none
7662
7663 integer nm
7664 c include 'LibAtMat.inc'
7665 +SEQ,LibAtMat.
7666
7667 integer A(10)
7668 real AW(10)
7669 integer q
7670 real Ad(10),AWd(10)
7671 integer qd
7672 real dens
7673 real gasdens
7674
7675 q=2 ! CF4
7676 A(1)=num_C2 ! C
7677 AW(1)=0.30
7678 A(2)=num_F ! F
7679 AW(2)=1.20
7680 qd=1
7681 Ad(1) = 12.01 + 4*19.0
7682 AWd(1)= 1
7683 dens=gasdens(Ad,AWd,qd)
7684 call IniMatter(nm,A,AW,q,dens,34.3e-6,0.19)
7685
7686 end
7687 +DECK,CF4WITHOUT,IF=NEVER.
7688 subroutine CF4_without_cor(nm)
7689 c
7690 c Initialization of Matter
7691 c
7692 implicit none
7693
7694 integer nm
7695 c include 'LibAtMat.inc'
7696 +SEQ,LibAtMat.
7697
7698 integer A(10)
7699 real AW(10)
7700 integer q
7701 real Ad(10),AWd(10)
7702 integer qd
7703 real dens
7704 real gasdens
7705
7706 q=2 ! CF4
7707 A(1)=num_C ! C
7708 AW(1)=0.30
7709 A(2)=num_F ! F
7710 AW(2)=1.20
7711 qd=1
7712 Ad(1) = 12.01 + 4*19.0
7713 AWd(1)= 1
7714 dens=gasdens(Ad,AWd,qd)
7715 call IniMatter(nm,A,AW,q,dens,34.3e-6,0.19)
7716
7717 end
7718 +DECK,CO250CF420,IF=NEVER.
7719 subroutine CO250CF420Ar30(nm)
7720 c
7721 c Initialization of Matter
7722 c
7723 implicit none
7724
7725 integer nm
7726 c include 'LibAtMat.inc'
7727 +SEQ,LibAtMat.
7728
7729 integer A(10)
7730 real AW(10)
7731 integer q
7732 real Ad(10),AWd(10)
7733 integer qd
7734 real dens
7735 real gasdens
7736 real w
7737
7738 q=4 ! CO2 50% CF4 20% Ar 30%
7739 A(1)=num_C1 ! C
7740 AW(1)=0.50
7741 A(2)=num_O ! O
7742 AW(2)=1.00
7743 A(1)=num_C2 ! C
7744 AW(1)=0.20
7745 A(3)=num_F ! F
7746 AW(3)=0.8
7747 A(4)=num_Ar ! Ar
7748 AW(4)=0.30
7749 qd=3
7750 Ad(1)=12.0+2*16.0 ! CO2
7751 AWd(1)=0.50
7752 Ad(2)=12.0+4*19.0 ! CF4
7753 AWd(2)=0.20
7754 Ad(3)=40.0 ! Ar
7755 AWd(3)=0.30
7756 dens=gasdens(Ad,AWd,qd)
7757 w=AWd(1)*33.0e-6 + AWd(2)*34.3e-6 + AWd(3)*26.4e-6
7758
7759 call IniMatter(nm,A,AW,q,dens,w,0.19)
7760
7761 end
7762 +DECK,LARGON,IF=NEVER.
7763 subroutine lArgon(nm)
7764 c
7765 c Initialization of Matter
7766 c
7767 implicit none
7768
7769 integer nm
7770 c include 'LibAtMat.inc'
7771 +SEQ,LibAtMat.
7772
7773 integer A(10)
7774 real AW(10)
7775 integer q
7776 real Ad(10),AWd(10)
7777 integer qd
7778 real dens
7779 real gasdens
7780
7781 q=1 ! Ar
7782 A(1)=num_Ar ! Ar
7783 AW(1)=1.0
7784 qd=1
7785 Ad(1)=40.0
7786 AWd(1)=1.0
7787 dens=gasdens(Ad,AWd,qd)
7788 call IniMatter(nm,A,AW,q,dens,26.4e-6,0.19)
7789
7790 end
7791 +DECK,AR95CH405,IF=NEVER.
7792 subroutine Ar95CH405(nm)
7793 c
7794 c Initialization of Matter
7795 c
7796 implicit none
7797
7798 integer nm
7799 c include 'LibAtMat.inc'
7800 +SEQ,LibAtMat.
7801
7802 integer A(10)
7803 real AW(10)
7804 integer q
7805 real Ad(10),AWd(10)
7806 integer qd
7807 real dens
7808 real gasdens
7809
7810 q=3 ! Ar
7811 A(1)=num_Ar ! Ar
7812 AW(1)=0.95
7813 A(2)=num_C ! C
7814 AW(2)=0.05
7815 A(3)=num_H ! H
7816 AW(3)=0.20
7817 qd=2
7818 Ad(1)=40.0
7819 AWd(1)=0.95
7820 Ad(2)=12+4*1
7821 AWd(2)=0.05
7822
7823 dens=gasdens(Ad,AWd,qd)
7824 call IniMatter(nm,A,AW,q,dens,26.4e-6,0.19)
7825
7826 end
7827 +DECK,AR93CH407,IF=NEVER.
7828 subroutine Ar93CH407(nm)
7829 c
7830 c Initialization of Matter
7831 c
7832 implicit none
7833
7834 integer nm
7835 c include 'LibAtMat.inc'
7836 +SEQ,LibAtMat.
7837
7838 integer A(10)
7839 real AW(10)
7840 integer q
7841 real Ad(10),AWd(10)
7842 integer qd
7843 real dens
7844 real gasdens
7845
7846 q=3 ! Ar
7847 A(1)=num_Ar ! Ar
7848 AW(1)=0.93
7849 A(2)=num_C ! C
7850 AW(2)=0.07
7851 A(3)=num_H ! H
7852 AW(3)=0.28
7853 qd=2
7854 Ad(1)=40.0
7855 AWd(1)=0.93
7856 Ad(2)=12+4*1
7857 AWd(2)=0.07
7858
7859 dens=gasdens(Ad,AWd,qd)
7860 call IniMatter(nm,A,AW,q,dens,26.4e-6,0.19)
7861
7862 end
7863 +DECK,AR90CH410,IF=NEVER.
7864 subroutine Ar90CH410(nm)
7865 c
7866 c Initialization of Matter
7867 c
7868 implicit none
7869
7870 integer nm
7871 c include 'LibAtMat.inc'
7872 +SEQ,LibAtMat.
7873
7874 integer A(10)
7875 real AW(10)
7876 integer q
7877 real Ad(10),AWd(10)
7878 integer qd
7879 real dens
7880 real gasdens
7881
7882 q=3 ! Ar
7883 A(1)=num_Ar ! Ar
7884 AW(1)=0.90
7885 A(2)=num_C ! C
7886 AW(2)=0.10
7887 A(3)=num_H ! H
7888 AW(3)=0.40
7889 qd=2
7890 Ad(1)=40.0
7891 AWd(1)=0.90
7892 Ad(2)=12+4*1
7893 AWd(2)=0.10
7894
7895 dens=gasdens(Ad,AWd,qd)
7896 call IniMatter(nm,A,AW,q,dens,26.4e-6,0.19)
7897
7898 end
7899 +DECK,AR80C2H620,IF=NEVER.
7900 subroutine Ar80C2H620(nm)
7901 c
7902 c Initialization of Matter
7903 c
7904 implicit none
7905
7906 integer nm
7907 c include 'LibAtMat.inc'
7908 +SEQ,LibAtMat.
7909
7910 integer A(10)
7911 real AW(10)
7912 integer q
7913 real Ad(10),AWd(10)
7914 integer qd
7915 real dens
7916 real gasdens
7917
7918 q=3 ! Ar
7919 A(1)=num_Ar ! Ar
7920 AW(1)=0.80
7921 A(2)=num_C ! C
7922 AW(2)=0.20*2
7923 A(3)=num_H ! H
7924 AW(3)=0.20*6
7925 qd=2
7926 Ad(1)=40.0
7927 AWd(1)=0.80
7928 Ad(2)=2*12.0+6*1.0
7929 AWd(2)=0.20
7930
7931 dens=gasdens(Ad,AWd,qd)
7932 call IniMatter(nm,A,AW,q,dens,26.4e-6,0.19)
7933
7934 end
7935 +DECK,KRIPTON,IF=NEVER.
7936 subroutine Kripton(nm)
7937 c
7938 c Initialization of Matter
7939 c
7940 implicit none
7941
7942 integer nm
7943 c include 'LibAtMat.inc'
7944 +SEQ,LibAtMat.
7945
7946 integer A(10)
7947 real AW(10)
7948 integer q
7949 real Ad(10),AWd(10)
7950 integer qd
7951 real dens
7952 real gasdens
7953
7954 q=1 ! Kr
7955 A(1)=num_Kr ! Kr
7956 AW(1)=1.0
7957 qd=1
7958 Ad(1)=84.0
7959 AWd(1)=1.0
7960 dens=gasdens(Ad,AWd,qd)
7961 call IniMatter(nm,A,AW,q,dens,24.4e-6,0.19)
7962
7963 end
7964 +DECK,XENON,IF=NEVER.
7965 subroutine Xenon(nm)
7966 c
7967 c Initialization of Matter
7968 c
7969 implicit none
7970
7971 integer nm
7972 c include 'LibAtMat.inc'
7973 +SEQ,LibAtMat.
7974
7975 integer A(10)
7976 real AW(10)
7977 integer q
7978 real Ad(10),AWd(10)
7979 integer qd
7980 real dens
7981 real gasdens
7982
7983 q=1 ! Xe
7984 A(1)=num_Xe ! Xe
7985 AW(1)=1.0
7986 qd=1
7987 Ad(1)=131.3
7988 AWd(1)=1.0
7989 dens=gasdens(Ad,AWd,qd)
7990 call IniMatter(nm,A,AW,q,dens,21.9e-6,0.19)
7991
7992 end
7993 +DECK,XE90CH410,IF=NEVER.
7994 subroutine Xe90CH410(nm)
7995 c
7996 c Initialization of Matter
7997 c
7998 implicit none
7999
8000 integer nm
8001 c include 'LibAtMat.inc'
8002 +SEQ,LibAtMat.
8003
8004 integer A(10)
8005 real AW(10)
8006 integer q
8007 real Ad(10),AWd(10)
8008 integer qd
8009 real dens
8010 real gasdens
8011
8012 q=3 ! 90% Xe + 10% CH4
8013 A(1)=num_Xe ! Xe
8014 AW(1)=0.90
8015 A(2)=num_C ! C
8016 AW(2)=0.10
8017 A(3)=num_H ! H4
8018 AW(3)=0.40
8019 qd=2
8020 Ad(1)=131.3
8021 AWd(1)=0.90
8022 Ad(2) = 12.01 + 4*1.0
8023 AWd(2)= 0.10
8024 dens=gasdens(Ad,AWd,qd)
8025 call IniMatter(nm,A,AW,q,dens,21.9e-6,0.19)
8026
8027 end
8028 +DECK,XE95CH405,IF=NEVER.
8029 subroutine Xe95CH405(nm)
8030 c
8031 c Initialization of Matter
8032 c
8033 implicit none
8034
8035 integer nm
8036 c include 'LibAtMat.inc'
8037 +SEQ,LibAtMat.
8038
8039 integer A(10)
8040 real AW(10)
8041 integer q
8042 real Ad(10),AWd(10)
8043 integer qd
8044 real dens
8045 real gasdens
8046
8047 q=3 ! 95% Xe + 05% CH4
8048 A(1)=num_Xe ! Xe
8049 AW(1)=0.95
8050 A(2)=num_C ! C
8051 AW(2)=0.05
8052 A(3)=num_H ! H4
8053 AW(3)=0.20
8054 qd=2
8055 Ad(1)=131.3
8056 AWd(1)=0.95
8057 Ad(2) = 12.01 + 4*1.0
8058 AWd(2)= 0.05
8059 dens=gasdens(Ad,AWd,qd)
8060 call IniMatter(nm,A,AW,q,dens,21.9e-6,0.19)
8061
8062 end
8063 +DECK,XE70,CH430,IF=NEVER.
8064 subroutine Xe70CH430(nm)
8065 c
8066 c Initialization of Matter
8067 c
8068 implicit none
8069
8070 integer nm
8071 c include 'LibAtMat.inc'
8072 +SEQ,LibAtMat.
8073
8074 integer A(10)
8075 real AW(10)
8076 integer q
8077 real Ad(10),AWd(10)
8078 integer qd
8079 real dens
8080 real gasdens
8081
8082 q=3 ! 70% Xe + 30% CH4
8083 A(1)=num_Xe ! Xe
8084 AW(1)=0.70
8085 A(2)=num_C ! C
8086 AW(2)=0.30
8087 A(3)=num_H ! H4
8088 AW(3)=1.2
8089 qd=2
8090 Ad(1)=131.3
8091 AWd(1)=0.70
8092 Ad(2) = 12.01 + 4*1.0
8093 AWd(2)= 0.30
8094 dens=gasdens(Ad,AWd,qd)
8095 call IniMatter(nm,A,AW,q,dens,21.9e-6,0.19)
8096
8097 end
8098 +DECK,XE875CH4,IF=NEVER.
8099 subroutine Xe875CH4075C3H805(nm)
8100 c
8101 c Initialization of Matter
8102 c
8103 implicit none
8104
8105 integer nm
8106 c include 'LibAtMat.inc'
8107 +SEQ,LibAtMat.
8108
8109 integer A(10)
8110 real AW(10)
8111 integer q
8112 real Ad(10),AWd(10)
8113 integer qd
8114 real dens
8115 real gasdens
8116
8117 q=3 ! 87.5% Xe + 7.5% CH4 + 5% C3H8
8118 A(1)=num_Xe ! Xe
8119 AW(1)=0.875
8120 A(2)=num_C ! C
8121 AW(2)=0.05*3 + 0.075
8122 A(3)=num_H ! H
8123 AW(3)=0.05*8 + 0.075*4
8124 qd=3
8125 Ad(1)=131.3
8126 AWd(1)=0.875
8127 Ad(2) = 12.01 + 4*1.0
8128 AWd(2)= 0.075
8129 Ad(3) = 3*12.01 + 8*1.0
8130 AWd(3)= 0.05
8131 dens=gasdens(Ad,AWd,qd)
8132 call IniMatter(nm,A,AW,q,dens,21.9e-6,0.19)
8133
8134 end
8135 +DECK,XE70CO2230,IF=NEVER.
8136 subroutine Xe70CO230(nm)
8137 c
8138 c Initialization of Matter
8139 c
8140 implicit none
8141
8142 integer nm
8143 c include 'LibAtMat.inc'
8144 +SEQ,LibAtMat.
8145
8146 integer A(10)
8147 real AW(10)
8148 integer q
8149 real Ad(10),AWd(10)
8150 integer qd
8151 real dens
8152 real gasdens
8153 real w
8154
8155
8156 q=3 ! 70% Xe + 30% CO2
8157 A(1)=num_Xe ! Xe
8158 AW(1)=0.70
8159 A(2)=num_C1 ! C
8160 AW(2)=0.30
8161 A(3)=num_O ! O2
8162 AW(3)=0.60
8163 qd=2
8164 Ad(1)=131.3
8165 AWd(1)=0.70
8166 Ad(2) = 12.01 + 2*16.0
8167 AWd(2)= 0.30
8168 dens=gasdens(Ad,AWd,qd)
8169 w=AWd(1)*21.9e-6 + 0.30*33.0e-6
8170 call IniMatter(nm,A,AW,q,dens,w,0.19)
8171
8172 end
8173 +DECK,XENONAR,IF=NEVER.
8174 subroutine Xenon_dens_Ar(nm)
8175 c
8176 c Initialization of Matter
8177 c
8178 implicit none
8179
8180 integer nm
8181 c include 'LibAtMat.inc'
8182 +SEQ,LibAtMat.
8183
8184 integer A(10)
8185 real AW(10)
8186 integer q
8187 real Ad(10),AWd(10)
8188 integer qd
8189 real dens
8190 real gasdens
8191
8192 q=1 ! Xe with density of Ar
8193 A(1)=num_Xe ! Xe
8194 AW(1)=1.0
8195 qd=1
8196 Ad(1)=40.0
8197 AWd(1)=1.0
8198 dens=gasdens(Ad,AWd,qd)
8199 c qd=1
8200 c Ad(1)=131.3
8201 c AWd(1)=1.0
8202 c dens=gasdens(Ad,AWd,qd)
8203 call IniMatter(nm,A,AW,q,dens,21.9e-6,0.19)
8204
8205 end
8206 +DECK,LITHIUM,IF=NEVER.
8207 subroutine Lithium(nm)
8208 c
8209 c Initialization of Matter
8210 c
8211 implicit none
8212
8213 integer nm
8214 c include 'LibAtMat.inc'
8215 +SEQ,LibAtMat.
8216
8217 integer A(10)
8218 real AW(10)
8219 integer q
8220 real Ad(10),AWd(10)
8221 integer qd
8222 real dens
8223 real gasdens
8224
8225 q=1 ! Lithium
8226 A(1)=num_Li
8227 AW(1)=1
8228 dens=0.53
8229 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
8230 *** Added argument to PriMatter (RV 13/4/99).
8231 c call PriMatter(0)
8232 *** End of modification.
8233
8234 end
8235 +DECK,POLYETHYL,IF=NEVER.
8236 subroutine Polyethylene(nm)
8237 c
8238 c Initialization of Matter
8239 c
8240 implicit none
8241
8242 integer nm
8243 c include 'LibAtMat.inc'
8244 +SEQ,LibAtMat.
8245
8246 integer A(10)
8247 real AW(10)
8248 integer q
8249 real Ad(10),AWd(10)
8250 integer qd
8251 real dens
8252 real gasdens
8253
8254 q=2 ! Polyethylene CH2
8255 A(1)=num_H ! H2
8256 AW(1)=2
8257 A(2)=num_C ! C
8258 AW(2)=1
8259 dens=0.925
8260 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
8261
8262 end
8263 +DECK,MYLAR,IF=NEVER.
8264 subroutine Mylar(nm)
8265 c
8266 c Initialization of Matter
8267 c
8268 implicit none
8269
8270 integer nm
8271 c include 'LibAtMat.inc'
8272 +SEQ,LibAtMat.
8273
8274 integer A(10)
8275 real AW(10)
8276 integer q
8277 real Ad(10),AWd(10)
8278 integer qd
8279 real dens
8280 real gasdens
8281
8282 q=3 ! mylar C5H4O2
8283 A(1)=num_C ! C5
8284 AW(1)=5
8285 A(2)=num_H ! H4
8286 AW(2)=4
8287 A(3)=num_O ! O2
8288 AW(3)=2
8289 dens=1.38
8290 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
8291
8292 end
8293 +DECK,ALUMINIUM,IF=NEVER.
8294 subroutine Aluminium(nm)
8295 c
8296 c Initialization of Matter
8297 c
8298 implicit none
8299
8300 integer nm
8301 c include 'LibAtMat.inc'
8302 +SEQ,LibAtMat.
8303
8304 integer A(10)
8305 real AW(10)
8306 integer q
8307 real Ad(10),AWd(10)
8308 integer qd
8309 real dens
8310 real gasdens
8311
8312 q=1 ! aluminium
8313 A(1)=num_Al ! Al
8314 AW(1)=1
8315 dens=2.7
8316 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
8317
8318 end
8319 +DECK,TEXTOLITE,IF=NEVER.
8320 subroutine Textolite(nm)
8321 c
8322 c Initialization of Matter
8323 c
8324 implicit none
8325
8326 integer nm
8327 c include 'LibAtMat.inc'
8328 +SEQ,LibAtMat.
8329
8330 integer A(10)
8331 real AW(10)
8332 integer q
8333 real dens
8334 c textolite is SiO2 + epoxidka. The density is 1.7 g/sm**3.
8335 c We know also the density of SiO2 - 2.5 g/sm**3 and the typical
8336 c density of the carbone polimers is 1 g/sm**3.
8337 c "epoxidka"( I don not know its right english name) is
8338 c a class of polimers. One of them is O-3, C-18, H-20.
8339 c We did't know
8340 c the ratio of the components in textolite, but knowing data above
8341 c we can calculate it.
8342 c DATA WTEX/12., 27.0, 18. ,20./
8343 c later comments
8344 c 05.04.95
8345 c If Wi is weight coef. by volume and Di is density than
8346 c W1*D1+(1-W1)*D2=D => W1=(D-D2)/(D1-D2)=0.466
8347 c W2=(D1-D)/(D1-D2)=0.534
8348 c If WKi is weight coef. by volume than
8349 c WK1=D1/A1 * W1=2.5/60 * 0.466 = 0.0194
8350 c WK2=D2/A2 * W2=1.0/284 * 0.534 = 0.00188
8351 c WK1/WK2 = 10.3
8352 c DATA WTEX/10.3, 23.6, 18. ,20./
8353
8354
8355
8356
8357 q=4 ! textolite
8358 A(1)=num_Si
8359 AW(1)=10.3
8360 A(2)=num_O
8361 AW(2)=23.6
8362 A(3)=num_C
8363 AW(3)=18.
8364 A(4)=num_H
8365 AW(4)=20.
8366 dens=1.7
8367 call IniMatter(nm,A,AW,q,dens,30.0e-6,0.19)
8368
8369 end
8370 +DECK,molecdef.
8371 subroutine molecdef
8372
8373 implicit none
8374
8375 c include 'ener.inc'
8376 +SEQ,ener.
8377 c include 'atoms.inc'
8378 +SEQ,atoms.
8379
8380 c include 'molecules.inc'
8381 +SEQ,molecule.
8382 c include 'molecdef.inc'
8383 +SEQ,molecdef.
8384 c include 'LibAtMat.inc'
8385 +SEQ,LibAtMat.
8386
8387 integer n,na
8388 real s
8389
8390 c Mean work per pair production is accordingly with
8391 c ICRU REPORT 31, Average Energy Required To Produce An Ion Pair, 1979.
8392
8393
8394 qSAtMol( numm_He)=1
8395 nAtMol(1,numm_He)=num_He
8396 qAtMol(1,numm_He)=1
8397 WWWMol( numm_He)=41.0e-6
8398 FFFMol( numm_He)=0.19
8399
8400 qSAtMol( numm_Ne)=1
8401 nAtMol(1,numm_Ne)=num_Ne
8402 qAtMol(1,numm_Ne)=1
8403 WWWMol( numm_Ne)=35.4e-6
8404 FFFMol( numm_Ne)=0.19
8405
8406 qSAtMol( numm_Ar)=1
8407 nAtMol(1,numm_Ar)=num_Ar
8408 qAtMol(1,numm_Ar)=1
8409 WWWMol( numm_Ar)=26.0e-6
8410 FFFMol( numm_Ar)=0.19
8411
8412 qSAtMol( numm_Kr)=1
8413 nAtMol(1,numm_Kr)=num_Kr
8414 qAtMol(1,numm_Kr)=1
8415 WWWMol( numm_Kr)=24.0e-6
8416 FFFMol( numm_Kr)=0.19
8417
8418 qSAtMol( numm_Xe)=1
8419 nAtMol(1,numm_Xe)=num_Xe
8420 qAtMol(1,numm_Xe)=1
8421 WWWMol( numm_Xe)=22.0e-6
8422 FFFMol( numm_Xe)=0.19
8423
8424 qSAtMol( numm_H2)=1
8425 nAtMol(1,numm_H2)=num_H
8426 qAtMol(1,numm_H2)=2
8427 WWWMol( numm_H2)=37.0e-6
8428 FFFMol( numm_H2)=0.19
8429
8430 qSAtMol( numm_N2)=1
8431 nAtMol(1,numm_N2)=num_N
8432 qAtMol(1,numm_N2)=2
8433 WWWMol( numm_N2)=35.0e-6
8434 FFFMol( numm_N2)=0.19
8435
8436 qSAtMol( numm_O2)=1
8437 nAtMol(1,numm_O2)=num_O
8438 qAtMol(1,numm_O2)=2
8439 WWWMol( numm_O2)=31.0e-6
8440 FFFMol( numm_O2)=0.19
8441
8442 qSAtMol( numm_NH3)=2
8443 nAtMol(1,numm_NH3)=num_N
8444 qAtMol(1,numm_NH3)=1
8445 nAtMol(2,numm_NH3)=num_H4
8446 qAtMol(2,numm_NH3)=3
8447 WWWMol( numm_NH3)=26.6e-6
8448 FFFMol( numm_NH3)=0.19
8449
8450 qSAtMol( numm_N2O)=2
8451 nAtMol(1,numm_N2O)=num_N
8452 qAtMol(1,numm_N2O)=2
8453 nAtMol(2,numm_N2O)=num_O
8454 qAtMol(2,numm_N2O)=1
8455 WWWMol( numm_N2O)=32.6e-6
8456 FFFMol( numm_N2O)=0.19
8457
8458 qSAtMol( numm_CO2)=2
8459 nAtMol(1,numm_CO2)=num_C1
8460 qAtMol(1,numm_CO2)=1
8461 nAtMol(2,numm_CO2)=num_O
8462 qAtMol(2,numm_CO2)=2
8463 WWWMol( numm_CO2)=33.0e-6
8464 FFFMol( numm_CO2)=0.19
8465
8466 qSAtMol( numm_CF4)=2
8467 nAtMol(1,numm_CF4)=num_C2
8468 qAtMol(1,numm_CF4)=1
8469 nAtMol(2,numm_CF4)=num_F
8470 qAtMol(2,numm_CF4)=4
8471 WWWMol( numm_CF4)=34.3e-6
8472 FFFMol( numm_CF4)=0.19
8473
8474 qSAtMol( numm_CH4)=2
8475 nAtMol(1,numm_CH4)=num_C3
8476 qAtMol(1,numm_CH4)=1
8477 nAtMol(2,numm_CH4)=num_H3
8478 qAtMol(2,numm_CH4)=4
8479 WWWMol( numm_CH4)=27.3e-6
8480 FFFMol( numm_CH4)=0.19
8481
8482 qSAtMol( numm_C2H2)=2
8483 nAtMol(1,numm_C2H2)=num_C3
8484 qAtMol(1,numm_C2H2)=2
8485 nAtMol(2,numm_C2H2)=num_H3
8486 qAtMol(2,numm_C2H2)=2
8487 WWWMol( numm_C2H2)=25.8e-6
8488 FFFMol( numm_C2H2)=0.19
8489
8490 qSAtMol( numm_C2H4)=2
8491 nAtMol(1,numm_C2H4)=num_C3
8492 qAtMol(1,numm_C2H4)=2
8493 nAtMol(2,numm_C2H4)=num_H3
8494 qAtMol(2,numm_C2H4)=4
8495 WWWMol( numm_C2H4)=25.8e-6
8496 FFFMol( numm_C2H4)=0.19
8497
8498 qSAtMol( numm_C2H6)=2
8499 nAtMol(1,numm_C2H6)=num_C3
8500 qAtMol(1,numm_C2H6)=2
8501 nAtMol(2,numm_C2H6)=num_H3
8502 qAtMol(2,numm_C2H6)=6
8503 WWWMol( numm_C2H6)=25.0e-6
8504 FFFMol( numm_C2H6)=0.19
8505
8506 qSAtMol( numm_C3H8)=2
8507 nAtMol(1,numm_C3H8)=num_C3
8508 qAtMol(1,numm_C3H8)=3
8509 nAtMol(2,numm_C3H8)=num_H3
8510 qAtMol(2,numm_C3H8)=8
8511 WWWMol( numm_C3H8)=24.0e-6
8512 FFFMol( numm_C3H8)=0.19
8513
8514 qSAtMol( numm_iC4H10)=2
8515 nAtMol(1,numm_iC4H10)=num_C3
8516 qAtMol(1,numm_iC4H10)=4
8517 nAtMol(2,numm_iC4H10)=num_H3
8518 qAtMol(2,numm_iC4H10)=10
8519 WWWMol( numm_iC4H10)=23.4e-6
8520 FFFMol( numm_iC4H10)=0.19
8521
8522 *** Addition (RV 14/1/00).
8523 qSAtMol( numm_C5H12)=2
8524 nAtMol(1,numm_C5H12)=num_C3
8525 qAtMol(1,numm_C5H12)=5
8526 nAtMol(2,numm_C5H12)=num_H3
8527 qAtMol(2,numm_C5H12)=12
8528 WWWMol( numm_C5H12)=23.2e-6 ! ICRU report 31
8529 FFFMol( numm_C5H12)=0.19
8530 *** End of addition.
8531
8532 qSAtMol( numm_C)=1 ! for debug
8533 nAtMol(1,numm_C)=num_C
8534 qAtMol(1,numm_C)=1
8535 WWWMol( numm_C)=31.0e-6
8536 FFFMol( numm_C)=0.19
8537
8538 *** Additions (RV 4/9/98).
8539 qSAtMol( numm_DME)=3
8540 nAtMol(1,numm_DME)=num_C3
8541 qAtMol(1,numm_DME)=2
8542 nAtMol(2,numm_DME)=num_H
8543 qAtMol(2,numm_DME)=6
8544 nAtMol(3,numm_DME)=num_O
8545 qAtMol(3,numm_DME)=1
8546 WWWMol( numm_DME)=45.4e-6
8547 FFFMol( numm_DME)=0.19
8548
8549 qSAtMol( numm_H2O)=2
8550 nAtMol(1,numm_H2O)=num_H
8551 qAtMol(1,numm_H2O)=2
8552 nAtMol(2,numm_H2O)=num_O
8553 qAtMol(2,numm_H2O)=1
8554 WWWMol( numm_H2O)=29.6e-6 ! ICRU 31 (1/5/79)
8555 FFFMol( numm_H2O)=0.19
8556
8557 *** Additions (RV 20/9/99).
8558 qSAtMol( numm_SF6)=2
8559 nAtMol(1,numm_SF6)=num_S
8560 qAtMol(1,numm_SF6)=1
8561 nAtMol(2,numm_SF6)=num_F
8562 qAtMol(2,numm_SF6)=6
8563 WWWMol( numm_SF6)=35.75e-6 ! ICRU 31 (1/5/79)
8564 FFFMol( numm_SF6)=0.19
8565
8566 qSAtMol( numm_C2F4H2)=3
8567 nAtMol(1,numm_C2F4H2)=num_C3
8568 qAtMol(1,numm_C2F4H2)=2
8569 nAtMol(2,numm_C2F4H2)=num_F
8570 qAtMol(2,numm_C2F4H2)=4
8571 nAtMol(3,numm_C2F4H2)=num_H
8572 qAtMol(3,numm_C2F4H2)=2
8573 WWWMol( numm_C2F4H2)=24.0e-6 ! Guess
8574 FFFMol( numm_C2F4H2)=0.19
8575
8576 qSAtMol( numm_C2F5H)=3
8577 nAtMol(1,numm_C2F5H)=num_C3
8578 qAtMol(1,numm_C2F5H)=2
8579 nAtMol(2,numm_C2F5H)=num_F
8580 qAtMol(2,numm_C2F5H)=5
8581 nAtMol(3,numm_C2F5H)=num_H
8582 qAtMol(3,numm_C2F5H)=1
8583 WWWMol( numm_C2F5H)=24.0e-6 ! Guess
8584 FFFMol( numm_C2F5H)=0.19
8585
8586 *** End of additions.
8587
8588 c qSAtMol( numm_CClF3)=2
8589 c nAtMol(1,numm_CClF3)=num_C3
8590 c qAtMol(1,numm_CClF3)=1
8591 c nAtMol(1,numm_CClF3)=num_Cl
8592 c qAtMol(1,numm_CClF3)=1
8593 c nAtMol(2,numm_CClF3)=num_F
8594 c qAtMol(2,numm_CClF3)=3
8595 c WWWMol( numm_CClF3)=24.0e-6
8596 c FFFMol( numm_CClF3)=0.19
8597
8598
8599
8600 do n=1,pqMol
8601 s=0.0
8602 do na=1,qSAtMol(n)
8603 s=s+Aat(nAtMol(na,n))*qAtMol(na,n)
8604 enddo
8605 weiMol(n)=s
8606 enddo
8607
8608
8609 end
8610
8611
8612
8613
8614 subroutine Primolec
8615
8616 implicit none
8617
8618 c include 'GoEvent.inc'
8619 +SEQ,GoEvent.
8620 c include 'molecules.inc'
8621 +SEQ,molecule.
8622 c include 'molecdef.inc'
8623 +SEQ,molecdef.
8624 c include 'LibAtMat.inc'
8625 +SEQ,LibAtMat.
8626
8627 integer n,na
8628
8629 if(soo.eq.0)return
8630
8631 write(oo,*)
8632 write(oo,*)' Primolec'
8633 write(oo,*)' pqMol=',pqMol
8634 do n=1,pqMol
8635 write(oo,*)' n=',n,' qSAtMol(n)=',qSAtMol(n)
8636 write(oo,*)' weiMol=',weiMol(n)
8637 write(oo,*)' WWWMol=',WWWMol(n)
8638 write(oo,*)' FFFMol=',FFFMol(n)
8639 do na=1,qSAtMol(n)
8640 write(oo,*)' nAtMol=',nAtMol(na,n),' qAtMol=',qAtMol(na,n)
8641 enddo
8642 enddo
8643
8644 end
8645
8646 +DECK,Inigas.
8647 subroutine Inigas( nmat, pqmole, pnmole, pwmole, pres, temp)
8648
8649 c
8650 c initialization of the gas
8651 c
8652 implicit none
8653
8654 c include 'GoEvent.inc'
8655 +SEQ,GoEvent.
8656 c include 'ener.inc'
8657 +SEQ,ener.
8658 c include 'atoms.inc'
8659 +SEQ,atoms.
8660 c include 'matters.inc'
8661 +SEQ,matters.
8662 c include 'volume.inc'
8663 +SEQ,volume.
8664 c include 'molecules.inc'
8665 +SEQ,molecule.
8666 c include 'molecdef.inc'
8667 +SEQ,molecdef.
8668
8669
8670 integer nmat ! Number of material
8671 integer pqmole ! Quantity of different molecules
8672 ! in the gas mixture.
8673 integer pnmole(pqMol) ! Their numbers in molecdef.inc
8674 ! accordingly with molecules.inc
8675 real pwmole(pqMol) ! Their weights
8676 ! (relative quantities of molecules).
8677 real pres ! Pressure in Torr.
8678 real temp ! Temperature in K.
8679
8680 integer qmol, qold
8681 integer nmol(pqMol)
8682 real wmol(pqMol)
8683
8684 integer n
8685 real s
8686 integer na,nm,i
8687
8688
8689 integer A(pqAt)
8690 real AW(pqAt)
8691 integer q
8692 real Ad(pqMol)
8693 real dens
8694 real gasdens
8695 real w
8696 real f
8697
8698 c write(oo,*)' nmat=',nmat
8699 c write(oo,*)' qmol=',qmol
8700 c do n=1,qmol
8701 c write(oo,*)nmol(n),pwmol(n)
8702 c enddo
8703 c write(oo,*)' temp=',temp
8704 c write(oo,*)' pres=',pres
8705
8706
8707 c Copy everything
8708 qmol=pqmole
8709 do n=1,qmol
8710 nmol(n)=pnmole(n)
8711 wmol(n)=pwmole(n)
8712 enddo
8713 do n=1,qmol ! Check for negative weights
8714 if(wmol(n).lt.0)then
8715 write(oo,*)' error in Inigas: negative weight: wmol=',
8716 - wmol(n)
8717 if(sret_err.eq.0) stop
8718 s_err=1
8719 return
8720 endif
8721 enddo
8722 s=0.0 ! Compute the sun of weights
8723 do n=1,qmol
8724 s=s+wmol(n)
8725 enddo
8726 if(s.eq.0)then ! Check zero sum
8727 write(oo,*)' error in Inigas: all weights are zero'
8728 if(sret_err.eq.0) stop
8729 s_err=1
8730 return
8731 endif
8732 do n=1,qmol ! Normalize the weights
8733 wmol(n)=wmol(n)/s
8734 enddo
8735 *** Remove components with zero weight, rewritten (RV 9/6/99).
8736 qold=qmol
8737 qmol=0
8738 do n=1,qold
8739 if(wmol(n).gt.0)then
8740 qmol=qmol+1
8741 nmol(qmol)=nmol(n)
8742 wmol(qmol)=wmol(n)
8743 endif
8744 enddo
8745 if(qmol.le.0)then
8746 print *,' !!!!!! INIGAS WARNING : No non-zero weight'//
8747 - ' gas components found; mixture rejected.'
8748 if(sret_err.eq.0) stop
8749 s_err=1
8750 return
8751 endif
8752 *** End of modification.
8753
8754
8755 c fill material
8756 q=0
8757 do n=1,qmol ! Take the next molecule
8758 nm=nmol(n) ! Its number in molecdef.inc
8759 c write(oo,*)' nm=',nm,' qSAtMol(nm)=',qSAtMol(nm)
8760 c Check that this molecule exists in list.
8761 if(nm.le.0.or.nm.gt.pqMol)then
8762 write(oo,*)' error in Inigas: the wrong molecule number'
8763 if(sret_err.eq.0) stop
8764 s_err=1
8765 return
8766 endif
8767 do na=1,qSAtMol(nm) ! Loop over atoms of current molecule
8768 do i=1,q ! Loop over enrolled atoms
8769 ! Check if the atom is already enrolled
8770 if(A(i).eq.nAtMol(na,nm))then
8771 goto 10
8772 endif
8773 enddo
8774 q=q+1 ! To enroll it
8775 A(q)=nAtMol(na,nm)
8776 AW(q)=qAtMol(na,nm) * wmol(n) ! The weight of the atom
8777 c write(oo,*)' q=',q,' A(q)=',A(q),' AW(q)=',AW(q)
8778 goto 20
8779 10 continue
8780 AW(i)=AW(i) + qAtMol(na,nm) * wmol(n)
8781 c write(oo,*)' q=',q,' A(q)=',A(q),' AW(q)=',AW(q)
8782 20 continue
8783 enddo
8784 enddo
8785
8786 do n=1,qmol
8787 nm=nmol(n)
8788 Ad(n)=weiMol(nm)
8789 enddo
8790
8791 c pressure, temperature
8792
8793 Cur_Pressure=pres
8794 Cur_Temper=temp
8795
8796 c density of the ideal gas
8797 dens = gasdens(Ad, wmol, qmol)
8798 if(s_err.eq.1) return
8799
8800 w=0.0
8801 f=0.0
8802 do n=1,qmol
8803 nm=nmol(n)
8804 w = w + WWWMol(nm) * wmol(n)
8805 f = f + FFFMol(nm) * wmol(n)
8806 enddo
8807
8808 call IniMatter(nmat,A,AW,q,dens,w,f)
8809 if(s_err.eq.1) return
8810
8811 *** Added argument to PriMatter (RV 13/4/99).
8812 c call PriMatter(0)
8813
8814
8815
8816 end
8817
8818
8819 +DECK,IniAtom.
8820
8821
8822 subroutine IniAtom(num,z,a)
8823 c
8824 c The special cases incorporated by fortran code:
8825 c Ar and O : with including exp. data
8826 c and change of part of 3p and 2p shell corespondently.
8827 c C for CO2 (C1) : 2p sift from 8.9 to 13.79
8828 c C for CF4 (C2) : 2p sift from 8.9 to 16.23
8829 c C for CH4 : 2p sift
8830 c c for C2H10 : 2p sift
8831 c
8832 implicit none
8833
8834 save
8835
8836 c include 'GoEvent.inc'
8837 +SEQ,GoEvent.
8838 c include 'ener.inc'
8839 +SEQ,ener.
8840 c include 'shellfi.inc'
8841 +SEQ,shellfi.
8842 c include 'atoms.inc'
8843 +SEQ,atoms.
8844 c include 'cconst.inc'
8845 +SEQ,cconst.
8846 c include 'shl.inc'
8847 +SEQ,shl.
8848 c include 'tpasc.inc'
8849 +SEQ,tpasc.
8850 c include 'LibAtMat.inc'
8851 +SEQ,LibAtMat.
8852
8853 integer num !number of atom in the bank
8854 integer z !charge
8855 real a !atomic weight
8856
8857 real w,sw,s
8858
8859 integer qbener
8860 parameter (qbener=138)
8861 real aenerc(qbener),epa(qbener)
8862 integer qbener1
8863 parameter (qbener1=5)
8864 real aenerc1(qbener1),epa1(qbener1)
8865 real e
8866 c integer num_at_mol
8867 c parameter (num_at_mol=2)
8868 real interp_linep_arr
8869
8870 c include 'shellescar.inc'
8871
8872 data aenerc(1) / 15.83 /
8873 data epa(1) / 29.2 /
8874 data aenerc(2) / 15.89 /
8875 data epa(2) / 29.5 /
8876 data aenerc(3) / 16.1 /
8877 data epa(3) / 30.3 /
8878 data aenerc(4) / 16.31 /
8879 data epa(4) / 31.1 /
8880 data aenerc(5) / 16.53 /
8881 data epa(5) / 31.8 /
8882 data aenerc(6) / 16.75 /
8883 data epa(6) / 32.5 /
8884 data aenerc(7) / 16.98 /
8885 data epa(7) / 33.1 /
8886 data aenerc(8) / 17.22 /
8887 data epa(8) / 33.7 /
8888 data aenerc(9) / 17.46 /
8889 data epa(9) / 34.2 /
8890 data aenerc(10) / 17.71 /
8891 data epa(10) / 34.7 /
8892 data aenerc(11) / 17.97 /
8893 data epa(11) / 35.1 /
8894 data aenerc(12) / 18.23 /
8895 data epa(12) / 35.5 /
8896 data aenerc(13) / 18.5 /
8897 data epa(13) / 35.8 /
8898 data aenerc(14) / 18.78 /
8899 data epa(14) / 36.1 /
8900 data aenerc(15) / 19.07 /
8901 data epa(15) / 36.3 /
8902 data aenerc(16) / 19.37 /
8903 data epa(16) / 36.5 /
8904 data aenerc(17) / 19.68 /
8905 data epa(17) / 36.3 /
8906 data aenerc(18) / 20 /
8907 data epa(18) / 36.7 /
8908 data aenerc(19) / 20.32 /
8909 data epa(19) / 36.8 /
8910 data aenerc(20) / 20.66 /
8911 data epa(20) / 36.7 /
8912 data aenerc(21) / 21.01 /
8913 data epa(21) / 36.7 /
8914 data aenerc(22) / 21.38 /
8915 data epa(22) / 36.5 /
8916 data aenerc(23) / 21.75 /
8917 data epa(23) / 36.3 /
8918 data aenerc(24) / 22.14 /
8919 data epa(24) / 36.1 /
8920 data aenerc(25) / 22.54 /
8921 data epa(25) / 35.7 /
8922 data aenerc(26) / 22.96 /
8923 data epa(26) / 35.4 /
8924 data aenerc(27) / 23.39 /
8925 data epa(27) / 34.9 /
8926 data aenerc(28) / 23.84 /
8927 data epa(28) / 34.4 /
8928 data aenerc(29) / 24.31 /
8929 data epa(29) / 33.8 /
8930 data aenerc(30) / 24.8 /
8931 data epa(30) / 33.1 /
8932 data aenerc(31) / 25.3 /
8933 data epa(31) / 32.3 /
8934 data aenerc(32) / 25.83 /
8935 data epa(32) / 31.4 /
8936 data aenerc(33) / 26.38 /
8937 data epa(33) / 30.5 /
8938 data aenerc(34) / 26.95 /
8939 data epa(34) / 29.5 /
8940 data aenerc(35) / 27.55 /
8941 data epa(35) / 28.3 /
8942 data aenerc(36) / 28.18 /
8943 data epa(36) / 27.1 /
8944 data aenerc(37) / 28.83 /
8945 data epa(37) / 25.7 /
8946 data aenerc(38) / 29.52 /
8947 data epa(38) / 24.3 /
8948 data aenerc(39) / 30.24 /
8949 data epa(39) / 22.7 /
8950 data aenerc(40) / 30.99 /
8951 data epa(40) / 21 /
8952 data aenerc(41) / 31.79 /
8953 data epa(41) / 19.1 /
8954 data aenerc(42) / 32.63 /
8955 data epa(42) / 17.1 /
8956 data aenerc(43) / 33.51 /
8957 data epa(43) / 15 /
8958 data aenerc(44) / 34.44 /
8959 data epa(44) / 12.8 /
8960 data aenerc(45) / 35.42 /
8961 data epa(45) / 10.3 /
8962 data aenerc(46) / 36.46 /
8963 data epa(46) / 7.77 /
8964 data aenerc(47) / 37.57 /
8965 data epa(47) / 6.1 /
8966 data aenerc(48) / 38.74 /
8967 data epa(48) / 4.62 /
8968 data aenerc(49) / 39.99 /
8969 data epa(49) / 3.41 /
8970 data aenerc(50) / 41.33 /
8971 data epa(50) / 2.47 /
8972 data aenerc(51) / 42.75 /
8973 data epa(51) / 1.77 /
8974 data aenerc(52) / 44.28 /
8975 data epa(52) / 1.3 /
8976 data aenerc(53) / 45.92 /
8977 data epa(53) / 1.03 /
8978 data aenerc(54) / 47.68 /
8979 data epa(54) / 0.914 /
8980 data aenerc(55) / 49.59 /
8981 data epa(55) / 0.916 /
8982 data aenerc(56) / 51.66 /
8983 data epa(56) / 1 /
8984 data aenerc(57) / 53.9 /
8985 data epa(57) / 1.13 /
8986 data aenerc(58) / 56.35 /
8987 data epa(58) / 1.28 /
8988 data aenerc(59) / 59.04 /
8989 data epa(59) / 1.36 /
8990 data aenerc(60) / 61.99 /
8991 data epa(60) / 1.42 /
8992 data aenerc(61) / 65.25 /
8993 data epa(61) / 1.45 /
8994 data aenerc(62) / 68.88 /
8995 data epa(62) / 1.48 /
8996 data aenerc(63) / 72.93 /
8997 data epa(63) / 1.48 /
8998 data aenerc(64) / 77.49 /
8999 data epa(64) / 1.47 /
9000 data aenerc(65) / 82.65 /
9001 data epa(65) / 1.45 /
9002 data aenerc(66) / 88.56 /
9003 data epa(66) / 1.41 /
9004 data aenerc(67) / 95.37 /
9005 data epa(67) / 1.36 /
9006 data aenerc(68) / 103.3 /
9007 data epa(68) / 1.29 /
9008 data aenerc(69) / 112.7 /
9009 data epa(69) / 1.2 /
9010 data aenerc(70) / 124 /
9011 data epa(70) / 1.1 /
9012 data aenerc(71) / 130.5 /
9013 data epa(71) / 1.05 /
9014 data aenerc(72) / 137.8 /
9015 data epa(72) / 0.987 /
9016 data aenerc(73) / 145.9 /
9017 data epa(73) / 0.923 /
9018 data aenerc(74) / 155 /
9019 data epa(74) / 0.856 /
9020 data aenerc(75) / 165.3 /
9021 data epa(75) / 0.785 /
9022 data aenerc(76) / 177.1 /
9023 data epa(76) / 0.709 /
9024 data aenerc(77) / 190.7 /
9025 data epa(77) / 0.63 /
9026 data aenerc(78) / 206.6 /
9027 data epa(78) / 0.547 /
9028 data aenerc(79) / 225.4 /
9029 data epa(79) / 0.461 /
9030 data aenerc(80) / 245 /
9031 data epa(80) / 0.381 /
9032 data aenerc(81) / 248 /
9033 data epa(81) / 4.66 /
9034 data aenerc(82) / 258.3 /
9035 data epa(82) / 4.23 /
9036 data aenerc(83) / 269.5 /
9037 data epa(83) / 3.83 /
9038 data aenerc(84) / 281.8 /
9039 data epa(84) / 3.45 /
9040 data aenerc(85) / 295.2 /
9041 data epa(85) / 3.1 /
9042 data aenerc(86) / 310 /
9043 data epa(86) / 2.76 /
9044 data aenerc(87) / 326.3 /
9045 data epa(87) / 2.45 /
9046 data aenerc(88) / 344.4 /
9047 data epa(88) / 2.16 /
9048 data aenerc(89) / 364.7 /
9049 data epa(89) / 1.89 /
9050 data aenerc(90) / 387.4 /
9051 data epa(90) / 1.64 /
9052 data aenerc(91) / 413.3 /
9053 data epa(91) / 1.41 /
9054 data aenerc(92) / 442.8 /
9055 data epa(92) / 1.2 /
9056 data aenerc(93) / 476.9 /
9057 data epa(93) / 1.01 /
9058 data aenerc(94) / 516.6 /
9059 data epa(94) / 0.836 /
9060 data aenerc(95) / 563.6 /
9061 data epa(95) / 0.682 /
9062 data aenerc(96) / 619.9 /
9063 data epa(96) / 0.546 /
9064 data aenerc(97) / 652.5 /
9065 data epa(97) / 0.484 /
9066 data aenerc(98) / 688.8 /
9067 data epa(98) / 0.426 /
9068 data aenerc(99) / 729.3 /
9069 data epa(99) / 0.373 /
9070 data aenerc(100) / 774.9 /
9071 data epa(100) / 0.324 /
9072 data aenerc(101) / 826.5 /
9073 data epa(101) / 0.278 /
9074 data aenerc(102) / 885.6 /
9075 data epa(102) / 0.237 /
9076 data aenerc(103) / 953.7 /
9077 data epa(103) / 0.199 /
9078 data aenerc(104) / 1044 /
9079 data epa(104) / 0.165 /
9080 data aenerc(105) / 1127 /
9081 data epa(105) / 0.135 /
9082 data aenerc(106) / 1240 /
9083 data epa(106) / 0.108 /
9084 data aenerc(107) / 1305 /
9085 data epa(107) / 0.0955 /
9086 data aenerc(108) / 1378 /
9087 data epa(108) / 0.0842 /
9088 data aenerc(109) / 1459 /
9089 data epa(109) / 0.0736 /
9090 data aenerc(110) / 1550 /
9091 data epa(110) / 0.0639 /
9092 data aenerc(111) / 1653 /
9093 data epa(111) / 0.0549 /
9094 data aenerc(112) / 1771 /
9095 data epa(112) / 0.0467 /
9096 data aenerc(113) / 1907 /
9097 data epa(113) / 0.0393 /
9098 data aenerc(114) / 2066 /
9099 data epa(114) / 0.0326 /
9100 data aenerc(115) / 2254 /
9101 data epa(115) / 0.0266 /
9102 data aenerc(116) / 2480 /
9103 data epa(116) / 0.0213 /
9104 data aenerc(117) / 2755 /
9105 data epa(117) / 0.0166 /
9106 data aenerc(118) / 3100 /
9107 data epa(118) / 0.0126 /
9108 data aenerc(119) / 3204 /
9109 data epa(119) / 0.0117 /
9110 data aenerc(120) / 3263 /
9111 data epa(120) / 0.0959 /
9112 data aenerc(121) / 3444 /
9113 data epa(121) / 0.0827 /
9114 data aenerc(122) / 3646 /
9115 data epa(122) / 0.0706 /
9116 data aenerc(123) / 3874 /
9117 data epa(123) / 0.0598 /
9118 data aenerc(124) / 4133 /
9119 data epa(124) / 0.0501 /
9120 data aenerc(125) / 4428 /
9121 data epa(125) / 0.0414 /
9122 data aenerc(126) / 4768 /
9123 data epa(126) / 0.0338 /
9124 data aenerc(127) / 5166 /
9125 data epa(127) / 0.0271 /
9126 data aenerc(128) / 5635 /
9127 data epa(128) / 0.0213 /
9128 data aenerc(129) / 6199 /
9129 data epa(129) / 0.0164 /
9130 data aenerc(130) / 6888 /
9131 data epa(130) / 0.0123 /
9132 data aenerc(131) / 7749 /
9133 data epa(131) / 0.00889 /
9134 data aenerc(132) / 8856 /
9135 data epa(132) / 0.00616 /
9136 data aenerc(133) / 10330 /
9137 data epa(133) / 0.00403 /
9138 data aenerc(134) / 12400 /
9139 data epa(134) / 0.00244 /
9140 data aenerc(135) / 15500 /
9141 data epa(135) / 0.00132 /
9142 data aenerc(136) / 20660 /
9143 data epa(136) / 0.000599 /
9144 data aenerc(137) / 31000 /
9145 data epa(137) / 0.000196 /
9146 data aenerc(138) / 61990 /
9147 data epa(138) / 2.9e-05 /
9148
9149
9150
9151 c include 'shellesco.inc'
9152
9153 data aenerc1(1) / 14.2 /
9154 data epa1(1) / 2.51 /
9155 data aenerc1(2) / 16.2 /
9156 data epa1(2) / 3.98 /
9157 data aenerc1(3) / 17.4 /
9158 data epa1(3) / 12.59 /
9159 data aenerc1(4) / 25.1 /
9160 data epa1(4) / 10.72 /
9161 data aenerc1(5) / 31.6 /
9162 data epa1(5) / 10 /
9163
9164 integer pqnpasc
9165 parameter(pqnpasc=20)
9166 integer nnpasc
9167 integer pqnene
9168 parameter(pqnene=100)
9169 integer nnene
9170 real Tresh_npasc
9171 real nene,npasc
9172
9173 common / comasc /
9174 + nnpasc,Tresh_npasc(pqnpasc),nnene(pqnpasc),
9175 + nene(pqnene,pqnpasc),npasc(pqnene,pqnpasc)
9176 save / comasc /
9177
9178
9179 integer i,iener,n,ne,j,ns,k,nn
9180 c integer ios
9181 real glin_integ_ar, step_integ_ar, sigma_nl
9182 c real lin_integ_ar
9183 c real interp_line_arr
9184 c real alog,sqrt
9185
9186 if(num.le.0.or.num.gt.pQAt)then
9187 write(oo,*)' Error in IniAtom: Wrong Atom number ',num
9188 stop
9189 endif
9190 if(Zat(num).ne.0)then
9191 write(oo,*)' Error in IniAtom: Atom number ',num,
9192 + 'is initialized already'
9193 stop
9194 endif
9195 do n=1,QseqAt ! fill sequensed number
9196 if(Zat(n).gt.z)then
9197 do nn=QseqAt,n,-1
9198 nseqAt(nn+1)=nseqAt(nn)
9199 enddo
9200 nseqAt(n)=num
9201 QseqAt=QseqAt+1
9202 go to 4
9203 endif
9204 enddo
9205 QseqAt=QseqAt+1
9206 nseqAt(QseqAt)=num
9207 4 continue
9208 Zat(num)=z
9209 Aat(num)=a
9210 cphoAt(num)=2.0*PI2*Zat(num)/(FSCON*ELMAS)
9211 RLenAt(num)=716.4*Aat(num)/
9212 + (Zat(num)*(Zat(num)+1)*alog(287/sqrt(float(Zat(num)))))
9213 RuthAt(num)=4.0*PI*Zat(num)*Zat(num)*ELRAD*ELRAD*ELMAS*ELMAS
9214 zato=zat(num)
9215 if(KeyTeor.eq.0)then
9216
9217 if(Zat(num).eq.1)then ! H
9218
9219 QShellAt(num)=1
9220 ThresholdAt(1,num)=16.4e-6 ! ionization potential of H2
9221 c accordingly with At.Data.Nucl.Data.Tables 24,323-371(1979)
9222 if(num.eq.num_H3)then ! for CH4
9223 c ThresholdAt(1,num)=15.2e-06
9224 ThresholdAt(1,num)=12.0e-06
9225 endif
9226 if(num.eq.num_H4)then ! for NH4
9227 ThresholdAt(1,num)=10.0e-06
9228 endif
9229 do ne=1,qener
9230 if(ener(ne+1).gt.ThresholdAt(1,num))then
9231 c PhotAt(ne,1,num)=1.51*0.0535*
9232 PhotAt(ne,1,num)=0.0535*
9233 + ((100.0e-6/
9234 + (enerc(ne) + 16.4e-6 - ThresholdAt(1,num)))**3.228)
9235 if(ener(ne).lt.ThresholdAt(1,num))then
9236 PhotAt(ne,1,num)=PhotAt(ne,1,num)*
9237 + (ThresholdAt(1,num)-ener(ne))/
9238 + (ener(ne+1)-ener(ne))
9239 endif
9240 endif
9241 enddo
9242
9243 c Now the cross section is generated in Mega-barns.
9244 c Calc. coef for going from 10**-18 sm**2 to Mev-2
9245 s=1.e-18 * 5.07e10 * 5.07e10
9246
9247 do ne=1,qener
9248 do ns=1,QShellAt(num)
9249 PhotAt(ne,ns,num)=PhotAt(ne,ns,num)*s
9250 enddo
9251 enddo
9252
9253 do ns=1,QShellAt(num)
9254 WeightShAt(ns,num)=step_integ_ar(ener,PhotAt(1,ns,num),qener,
9255 + ener(1),ener(qener+1))/cphoAt(num)
9256 enddo
9257
9258
9259 go to 100
9260
9261 endif
9262
9263 if(Zat(num).eq.6)then
9264
9265 call henke
9266
9267 QShellAt(num)=qash
9268 do ns=1,QShellAt(num)
9269 ThresholdAt(ns,num)=athreshold(ns)
9270 if(ns.eq.QShellAt(num))then
9271 if(num.eq.num_C1)then
9272 ThresholdAt(ns,num)=13.79e-6 ! CO2
9273 endif
9274 if(num.eq.num_C2)then
9275 ThresholdAt(ns,num)=16.23e-6 ! CF4
9276 endif
9277 if(num.eq.num_C3)then
9278 c ThresholdAt(ns,num)=15.2e-6 ! CH4
9279 ThresholdAt(ns,num)=12.0e-6 ! CH4 and so on
9280 endif
9281 endif
9282 do ne=1,qener
9283 PhotAt(ne,ns,num)=
9284 + interp_linep_arr(aener(1,ns),aphot(1,ns),qaener(ns),
9285 + athreshold(ns),
9286 + (enerc(ne) - (ThresholdAt(ns,num) - athreshold(ns))) )
9287 enddo
9288 enddo
9289
9290 c Now the cross section is generated in Mega-barns.
9291 c Calc. coef for going from 10**-18 sm**2 to Mev-2
9292 s=1.e-18 * 5.07e10 * 5.07e10
9293
9294 do ne=1,qener
9295 do ns=1,QShellAt(num)
9296 PhotAt(ne,ns,num)=PhotAt(ne,ns,num)*s
9297 enddo
9298 enddo
9299
9300 do ns=1,QShellAt(num)
9301 WeightShAt(ns,num)=step_integ_ar(ener,PhotAt(1,ns,num),qener,
9302 + ener(1),ener(qener+1))/cphoAt(num)
9303 enddo
9304
9305
9306 go to 100
9307
9308 endif
9309
9310
9311 qshPas(num)=0
9312 call readPas(num)
9313 if(qshPas(num).gt.0)then
9314
9315
9316
9317 QShellAt(num)=qshPas(num)
9318 do ns=1,qshPas(num)
9319 ThresholdAt(ns,num)=EthPas(ns,num)*1.e-6
9320 if(Zat(num).eq.6.and.ns.eq.3.and.
9321 + num.eq.num_C1)then
9322 c + num_at_mol(num).eq.1)then
9323 ThresholdAt(ns,num)=13.79*1.e-6 ! for CO2
9324 endif
9325 if(Zat(num).eq.6.and.ns.eq.3.and.
9326 + num.eq.num_C2)then
9327 c + num_at_mol(num).eq.2)then
9328 ThresholdAt(ns,num)=16.23*1.e-6 ! for CF4
9329 endif
9330 if(Zat(num).eq.6.and.ns.eq.3.and.
9331 + num.eq.num_C3)then
9332 ThresholdAt(ns,num)=15.2*1.e-6 ! for CH4
9333 endif
9334 if(ThresholdAt(ns,num).lt.ener(1))then
9335 write(oo,*)' error in IniAtom:'
9336 write(oo,*)' too high ener(1)=',ener(1)
9337 write(oo,*)' ThresholdAt(ns,num)=',
9338 + ThresholdAt(ns,num)
9339 stop
9340 endif
9341
9342 enddo
9343
9344
9345
9346 do ne=1,qener
9347 do i=1,qshPas(num)
9348 s=0.0
9349 c do i=5,5
9350 if(Zat(num).eq.18.and.
9351 + i.eq.5.and.
9352 + enerc(ne)*1.e6.gt.EthPas(i,num).and.enerc(ne)*1.e6.le.40)then
9353 j=qbener
9354 do k=2,qbener
9355 if(aenerc(k).ge.enerc(ne)*1.e6)then
9356 j=k-1
9357 go to 5
9358 endif
9359 enddo
9360 5 s=s+ epa(j)+(enerc(ne)*1.e6-aenerc(j))*
9361 + (epa(j+1)-epa(j))/(aenerc(j+1)-aenerc(j))
9362
9363 elseif(Zat(num).eq.8.and.
9364 + i.eq.3.and.
9365 + enerc(ne)*1.e6.gt.EthPas(i,num).and.enerc(ne)*1.e6.le.25.1)then
9366 j=qbener1
9367 do k=2,qbener1
9368 if(aenerc1(k).ge.enerc(ne)*1.e6)then
9369 j=k-1
9370 go to 6
9371 endif
9372 enddo
9373 6 s=s+ epa1(j)+(enerc(ne)*1.e6-aenerc1(j))*
9374 + (epa1(j+1)-epa1(j))/(aenerc1(j+1)-aenerc1(j))
9375
9376 else
9377 if(Zat(num).eq.6.and.i.eq.3)then
9378 c if(num.eq.num_C1)then
9379 cc if(num_at_mol(num).eq.1)then
9380 c e=enerc(ne)*1.e6-(13.79-.8987E+01)
9381 c elseif(num.eq.num_C2)then
9382 cc elseif(num_at_mol(num).eq.2)then
9383 c e=enerc(ne)*1.e6-(16.23-.8987E+01)
9384 c else
9385 c e=enerc(ne)*1.e6
9386 c endif
9387 e=enerc(ne) - ThresholdAt(i,num) + .8987E+01*1.0e-6
9388 e=e*1.e6
9389 else
9390 e=enerc(ne)*1.e6
9391 endif
9392
9393 s=s + sigma_nl
9394 + (e , E0Pas(i,num),EthPas(i,num),
9395 + ywPas(i,num),lPas(i,num),
9396 + yaPas(i,num),PPas(i,num),sigma0Pas(i,num))
9397
9398
9399 endif
9400
9401 PhotAt(ne,i,num)=s
9402
9403 enddo
9404 enddo
9405
9406 c Now the cross section is generated in Mega-barns.
9407 c Calc. coef for going from 10**-18 sm**2 to Mev-2
9408 s=1.e-18 * 5.07e10 * 5.07e10
9409
9410 do ne=1,qener
9411 do i=1,qshPas(num)
9412 PhotAt(ne,i,num)=PhotAt(ne,i,num)*s
9413 enddo
9414 enddo
9415
9416 do ns=1,qshPas(num)
9417 WeightShAt(ns,num)=step_integ_ar(ener,PhotAt(1,ns,num),qener,
9418 + ener(1),ener(qener+1))/cphoAt(num)
9419 enddo
9420
9421
9422 go to 100
9423
9424 endif ! continuing of old algorithm
9425
9426
9427 call shellfi
9428 c call prishellfi
9429 endif
9430 if(qash.eq.0.or.KeyTeor.ne.0)then
9431 call shteor(num)
9432 if(qash.eq.0)then
9433 write(oo,*)' Error in IniAtom:',
9434 + 'can not find atom with z=',z
9435 stop
9436 endif
9437 call GenTheorPhot
9438 c call prishellfi
9439 endif
9440
9441 call shellfico
9442 c call prishellfi
9443
9444 QShellAt(num)=qash
9445 do i=1,qatm
9446 if(ZAt(num).eq.charge(i))then
9447 if(QShellAt(num).ne.qshl(i))then
9448 write(oo,*)' Worning of IniAtom:'
9449 write(oo,*)' Quantity of shell is different for shl'
9450 write(oo,*)' In may lead to error'
9451 endif
9452 goto 10
9453 endif
9454 enddo
9455 10 continue
9456 do i=1,QShellAt(num)
9457 ThresholdAt(i,num)=athreshold(i)
9458 if(ThresholdAt(i,num).lt.ener(1))then
9459 write(oo,*)' error in IniAtom:'
9460 write(oo,*)' too high ener(1)=',ener(1)
9461 write(oo,*)' ThresholdAt(ns,num)=',
9462 + ThresholdAt(i,num)
9463 stop
9464 endif
9465 WeightShAt(i,num)=aweight(i)
9466
9467 do iener=1,qener
9468
9469 PhotAt(iener,i,num)=
9470 + glin_integ_ar(aener(1,i),aphot(1,i),qaener(i),
9471 + ener(iener),ener(iener+1),ThresholdAt(i,num))/
9472 + (ener(iener+1)-ener(iener))
9473
9474 enddo
9475
9476 enddo
9477
9478 *** Added argument to PriAtoms (RV 13/4/99)
9479 c call PriAtoms(0)
9480 *** End of modification.
9481
9482 w=0.0
9483 do i=1,QShellAt(num)
9484 w=w+WeightShAt(i,num)
9485 enddo
9486 do i=1,QShellAt(num)
9487 WeightShAt(i,num)=WeightShAt(i,num)/w
9488 enddo
9489 sw=0.0
9490 do i=1,QShellAt(num)
9491 w=step_integ_ar(ener,PhotAt(1,i,num),qener,
9492 + ener(1),ener(qener+1))
9493 PWeightShAt(i,num)=w
9494 sw=sw+w
9495 if(w.lt.0.0)then
9496 do n=1,qener
9497 PhotAt(n,i,num)=0.0
9498 enddo
9499 else
9500 do n=1,qener
9501 PhotAt(n,i,num)=PhotAt(n,i,num)*cphoAt(num)*
9502 + WeightShAt(i,num)/w
9503 enddo
9504 ******* write(oo,*)' koef=',cphoAt(num)*WeightShAt(i,num)/w
9505 endif
9506 enddo
9507 do i=1,QShellAt(num)
9508 PWeightShAt(i,num)=PWeightShAt(i,num)/sw
9509 enddo
9510
9511 100 continue
9512
9513 do i=1,qatm
9514 if(ZAt(num).eq.charge(i))then
9515 if(QShellAt(num).ne.qshl(i))then
9516 write(oo,*)' Worning of IniAtom:'
9517 write(oo,*)' Quantity of shell is different for shl'
9518 write(oo,*)' In may lead to error'
9519 endif
9520 goto 20
9521 endif
9522 enddo
9523 20 continue
9524
9525 s=0.0
9526 do ns=1,QShellAt(num)
9527 c write(oo,*)' start integration'
9528 ISPhotBAt(ns,num)=step_integ_ar
9529 + (ener,PhotAt(1,ns,num),qener,ener(1),ener(qener+1))
9530 s=s+ISPhotBAt(ns,num)
9531 enddo
9532 IAPhotBAt(num)=s
9533 MinThresholdAt(num)=ThresholdAt(QShellAt(num),num)
9534 NshMinThresholdAt(num)=QShellAt(num)
9535 Min_ind_E_At(num)=0
9536 Max_ind_E_At(num)=0
9537
9538 if(IAPhotBAt(num).gt.cphoAt(num))then
9539 c reduce all shells
9540 s=cphoAt(num)/IAPhotBAt(num)
9541 do ne=1,qener
9542 do ns=1,QShellAt(num)
9543 PhotAt(ne,ns,num)=PhotAt(ne,ns,num)*s
9544 enddo
9545 enddo
9546 c copy absorbtion to ionization
9547 do ne=1,qener
9548 do ns=1,QShellAt(num)
9549 PhotIonAt(ne,ns,num)=PhotAt(ne,ns,num)
9550 enddo
9551 enddo
9552 c reduce weights
9553 do ns=1,QShellAt(num)
9554 WeightShAt(ns,num)=WeightShAt(ns,num)*s
9555 enddo
9556
9557 elseif(IAPhotBAt(num).lt.cphoAt(num))then
9558 c copy absorbtion to ionzation
9559 do ne=1,qener
9560 do ns=1,QShellAt(num)
9561 PhotIonAt(ne,ns,num)=PhotAt(ne,ns,num)
9562 enddo
9563 enddo
9564 c add excitation part to absorption
9565
9566
9567 j=qener
9568 do ne=3,qener
9569 if(ener(ne).gt.MinThresholdAt(num))then
9570 j=ne-1 ! ener(j) in the last point
9571 ! So the last interval has number j-1
9572 go to 25
9573 endif
9574 enddo
9575 25 continue
9576 if(j.le.2)then
9577 write(oo,*)' Error in IniAtom:'
9578 write(oo,*)' cannot insert excitation'
9579 write(oo,*)' too large ener(1)=',ener(1)
9580 write(oo,*)' MinThresholdAt(num)=',
9581 + MinThresholdAt(num)
9582 stop
9583 endif
9584 nn=1
9585 do ne=j-1,1,-1
9586 if(enerc(ne).lt. 0.7*MinThresholdAt(num))then
9587 nn=ne
9588 go to 30
9589 endif
9590 enddo
9591 30 continue
9592 s=(-IAPhotBAt(num)+cphoAt(num))/
9593 + (ener(j) - ener(nn))
9594
9595 do ne=nn,j-1
9596 PhotAt(ne,NshMinThresholdAt(num),num)=
9597 + PhotAt(ne,NshMinThresholdAt(num),num)+s
9598 enddo
9599 Min_ind_E_At(num)=nn
9600 Max_ind_E_At(num)=j-1
9601
9602
9603
9604 else
9605 c copy absorbtion to ionzation
9606 do ne=1,qener
9607 do ns=1,QShellAt(num)
9608 PhotIonAt(ne,ns,num)=PhotAt(ne,ns,num)
9609 enddo
9610 enddo
9611 c add excitation part to absorption
9612
9613 endif
9614
9615 s=0.0
9616 do ns=1,QShellAt(num)
9617 ISPhotAt(ns,num)=step_integ_ar
9618 + (ener,PhotAt(1,ns,num),qener,ener(1),ener(qener+1))
9619 s=s+ISPhotAt(ns,num)
9620 enddo
9621 IAPhotAt(num)=s
9622
9623 s=0.0
9624 do ns=1,QShellAt(num)
9625 ISPhotIonAt(ns,num)=step_integ_ar
9626 + (ener,PhotIonAt(1,ns,num),qener,
9627 + ener(1),ener(qener+1))
9628 s=s+ISPhotIonAt(ns,num)
9629 enddo
9630 IAPhotIonAt(num)=s
9631
9632
9633
9634 end
9635
9636
9637 subroutine GenTheorPhot
9638
9639 implicit none
9640
9641 c include 'ener.inc'
9642 +SEQ,ener.
9643 c include 'shellfi.inc'
9644 +SEQ,shellfi.
9645
9646 integer nsh,nen
9647
9648 do nsh=1,qash
9649
9650 qaener(nsh)=qener
9651 do nen=1,qener
9652 aener(nen,nsh)=enerc(nen)
9653 if(athreshold(nsh).lt.ener(nen+1))then
9654 aphot(nen,nsh)=1.0/(enerc(nen)**2.5)
9655 if(athreshold(nsh).gt.ener(nen))then
9656 aphot(nen,nsh)=aphot(nen,nsh)*
9657 + (ener(nen+1)-athreshold(nsh))/
9658 + (ener(nen+1)-ener(nen))
9659 endif
9660 else
9661 aphot(nen,nsh)=0.0
9662 endif
9663 enddo
9664 enddo
9665
9666 end
9667
9668
9669 subroutine shellfico
9670
9671 implicit none
9672
9673 c include 'ener.inc'
9674 +SEQ,ener.
9675 c include 'shellfi.inc'
9676 +SEQ,shellfi.
9677
9678 integer is,iaen,iaens,ien,iens
9679 real np
9680 np=2.5
9681 c the prolongation is needed only for first shell
9682
9683 do is=1,qash
9684
9685
9686 c is=1
9687
9688 do iaen=qaener(is),1,-1
9689 if(aphot(iaen,is).gt.0)then
9690 iaens=iaen
9691 go to 10
9692 endif
9693 enddo
9694 10 continue
9695
9696 if(is.ne.1)then
9697 if(aener(iaens,is).eq.aener(1,is-1))then
9698 go to 30
9699 endif
9700 endif
9701
9702 c same strange empty place in file in some atoms
9703
9704 if(aener(iaens,is).lt.enerc(qener))then
9705 do ien=1,qener
9706 if(enerc(ien).gt.aener(iaens,is))then
9707 iens=ien
9708 goto 20
9709 endif
9710 enddo
9711 20 continue
9712 iaen=iaens
9713 do ien=iens,qener
9714 iaen=iaen+1
9715 aener(iaen,is)=enerc(ien)
9716 aphot(iaen,is)=aphot(iaens,is)*
9717 + (aener(iaens,is)/enerc(ien))**np
9718 enddo
9719 qaener(is)=iaen
9720 endif
9721
9722 30 continue
9723
9724 enddo
9725
9726 c if(zato.eq.18)then
9727 c call prishellfi
9728 c endif
9729
9730 end
9731
9732
9733 subroutine priatoms(n)
9734
9735 implicit none
9736
9737 integer n ! n = 0,1 short output
9738 ! n >= 2 long output
9739 c include 'GoEvent.inc'
9740 +SEQ,GoEvent.
9741 c include 'ener.inc'
9742 +SEQ,ener.
9743 c include 'atoms.inc'
9744 +SEQ,atoms.
9745
9746 integer nat, nsh, nen, nat1
9747
9748 if(soo.eq.0)return
9749
9750 write(oo,*)
9751 write(oo,*)' priatoms: Atomic data'
9752 write(oo,*)' KeyTeor=',KeyTeor
9753 do nat=1,pQAt
9754 if(Zat(nat).gt.0)then
9755 write(oo,*)
9756 write(oo,*)' nat=',nat,' Zat=',Zat(nat),' Aat=',Aat(nat),
9757 + ' QShellAt=',QShellAt(nat)
9758 c write(oo,*)' num_at_mol=',num_at_mol(nat)
9759 write(oo,*)' cphoAt=',cphoAt(nat)
9760 write(oo,*)' RLenAt=',RLenAt(nat)
9761 write(oo,*)' RuthAt=',RuthAt(nat)
9762 do nsh=1,QShellAt(nat)
9763 write(oo,*)' ThresholdAt=',ThresholdAt(nsh,nat),
9764 + ' WeightShAt=',WeightShAt(nsh,nat)
9765 write(oo,*)' PWeightShAt=',PWeightShAt(nsh,nat)
9766 enddo
9767 write(oo,*)' IAPhotBAt IAPhotAt IAPhotIonAt '
9768 write(oo,*)IAPhotBAt(nat), IAPhotAt(nat), IAPhotIonAt(nat)
9769 do nsh=1,QShellAt(nat)
9770 write(oo,*)nsh,
9771 + ISPhotBAt(nsh,nat), ISPhotAt(nsh,nat), ISPhotIonAt(nsh,nat)
9772 enddo
9773 write(oo,*)' MinThresholdAt=',MinThresholdAt(nat)
9774 write(oo,*)' NshMinThresholdAt=',NshMinThresholdAt(nat)
9775 write(oo,*)' Min_ind_E_At=',Min_ind_E_At(nat),
9776 + ' Max_ind_E_At=',Max_ind_E_At(nat)
9777 if(n.ge.2)then
9778 write(oo,*)' energy and photoabs cross sections'
9779 c do nen=1,qener
9780 c write(oo,'(10e12.3)')
9781 c + enerc(nen),(PhotAt(nen,nsh,nat),nsh=1,QShellAt(nat))
9782 c enddo
9783 do nsh=1,QShellAt(nat)
9784 write(oo,*)' shell number=',nsh
9785 write(oo,*)' enerc, PhotAt, PhotIonAt'
9786 do nen=1,qener
9787 write(oo,'(3e10.3)')
9788 + enerc(nen),PhotAt(nen,nsh,nat),PhotIonAt(nen,nsh,nat)
9789 enddo ! nen=1,qener
9790 enddo ! nsh=1,QShellAt(nat)
9791 endif ! if(n.ge.2)
9792 endif ! if(Zat(nat).gt.0)
9793 enddo ! nat=1,pQAt
9794
9795 write(oo,*)' Sequenced numbers:'
9796 write(oo,*)' nat Zat(nat) nseqAt(nat)'
9797 do nat=1,QseqAt
9798 write(oo,*) nat, Zat(nat), nseqAt(nat)
9799 enddo
9800 write(oo,*)
9801 + ' nat1 nat Zat(nat)'
9802 do nat1=1,QseqAt
9803 nat=nseqAt(nat1)
9804 write(oo,*) nat1, nat, Zat(nat)
9805 enddo
9806
9807 end
9808
9809
9810
9811 +DECK,henke.
9812 subroutine henke
9813 c
9814 c include Henke's data
9815
9816 implicit none
9817
9818 c include 'GoEvent.inc'
9819 +SEQ,GoEvent.
9820 c include 'shellfi.inc'
9821 +SEQ,shellfi.
9822
9823 integer nae,ns
9824
9825
9826 qash=0 !sign of absence
9827
9828
9829 c The next code is generated by a computer program
9830 c on the basis of data file 'henke.dat'.
9831
9832
9833 if(zato.eq.6)then
9834
9835 c include 'henke6.inc'
9836 +SEQ,henke6.
9837
9838 endif
9839
9840
9841 c end of computer code
9842
9843
9844 do ns=1,qash
9845 athreshold(ns)=athreshold(ns)*1.e-6
9846 do nae=1,qaener(ns)
9847 aener(nae,ns)=aener(nae,ns)*1.e-6
9848 enddo
9849 enddo
9850
9851
9852 if(soo.eq.1)then
9853 if(qash.eq.0)then
9854 write(oo,*)' Worning of henke: atom z=',zato,' is not found.'
9855 write(oo,*)
9856 + ' The data will be seached by readPAS, accuracy will be lower.'
9857
9858 endif
9859 endif
9860
9861 c call prishellfi
9862
9863 end
9864
9865 +DECK,tpasc.
9866
9867 subroutine readPas(na)
9868
9869 implicit none
9870
9871 integer na
9872
9873 c include 'GoEvent.inc'
9874 +SEQ,GoEvent.
9875 c include 'ener.inc'
9876 +SEQ,ener.
9877 c include 'atoms.inc'
9878 +SEQ,atoms.
9879 c include 'tpasc.inc'
9880 +SEQ,tpasc.
9881
9882 integer Za,npas
9883
9884 integer i
9885
9886 c include 'shelltsc.inc'
9887 integer pq
9888 parameter (pq=10)
9889 integer z(pq)
9890 integer n(pq)
9891 integer pmaxn
9892 parameter (pmaxn=5)
9893 integer l(pq,pmaxn)
9894 real p(pq,pmaxn,6)
9895 data z(1) / 2 /
9896 data n(1) / 1 /
9897 data l(1,1) / 0 /
9898 data p(1,1,1) / 23.42 /
9899 data p(1,1,2) / 2.024 /
9900 data p(1,1,3) / 2578 /
9901 data p(1,1,4) / 9.648 /
9902 data p(1,1,5) / 6.218 /
9903 data p(1,1,6) / 0 /
9904 data z(2) / 3 /
9905 data n(2) / 2 /
9906 data l(2,1) / 0 /
9907 data p(2,1,1) / 59.85 /
9908 data p(2,1,2) / 29.51 /
9909 data p(2,1,3) / 125.2 /
9910 data p(2,1,4) / 73020 /
9911 data p(2,1,5) / 0.9438 /
9912 data p(2,1,6) / 0 /
9913 data l(2,2) / 0 /
9914 data p(2,2,1) / 5.495 /
9915 data p(2,2,2) / 3.466 /
9916 data p(2,2,3) / 47.74 /
9917 data p(2,2,4) / 20.35 /
9918 data p(2,2,5) / 4.423 /
9919 data p(2,2,6) / 0 /
9920 data z(3) / 6 /
9921 data n(3) / 3 /
9922 data l(3,1) / 0 /
9923 data p(3,1,1) / 291 /
9924 data p(3,1,2) / 86.55 /
9925 data p(3,1,3) / 74.21 /
9926 data p(3,1,4) / 54.98 /
9927 data p(3,1,5) / 1.503 /
9928 data p(3,1,6) / 0 /
9929 data l(3,2) / 0 /
9930 data p(3,2,1) / 17.55 /
9931 data p(3,2,2) / 10.26 /
9932 data p(3,2,3) / 4564 /
9933 data p(3,2,4) / 1.568 /
9934 data p(3,2,5) / 10.85 /
9935 data p(3,2,6) / 0 /
9936 data l(3,3) / 1 /
9937 data p(3,3,1) / 8.987 /
9938 data p(3,3,2) / 9.435 /
9939 data p(3,3,3) / 1152 /
9940 data p(3,3,4) / 5.687 /
9941 data p(3,3,5) / 6.336 /
9942 data p(3,3,6) / 0.4474 /
9943 data z(4) / 7 /
9944 data n(4) / 3 /
9945 data l(4,1) / 0 /
9946 data p(4,1,1) / 404.8 /
9947 data p(4,1,2) / 127 /
9948 data p(4,1,3) / 47.48 /
9949 data p(4,1,4) / 138 /
9950 data p(4,1,5) / 1.252 /
9951 data p(4,1,6) / 0 /
9952 data l(4,2) / 0 /
9953 data p(4,2,1) / 23.1 /
9954 data p(4,2,2) / 14.82 /
9955 data p(4,2,3) / 772.2 /
9956 data p(4,2,4) / 2.306 /
9957 data p(4,2,5) / 9.139 /
9958 data p(4,2,6) / 0 /
9959 data l(4,3) / 1 /
9960 data p(4,3,1) / 11.49 /
9961 data p(4,3,2) / 11.64 /
9962 data p(4,3,3) / 10290 /
9963 data p(4,3,4) / 2.361 /
9964 data p(4,3,5) / 8.821 /
9965 data p(4,3,6) / 0.4239 /
9966 data z(5) / 8 /
9967 data n(5) / 3 /
9968 data l(5,1) / 0 /
9969 data p(5,1,1) / 537.3 /
9970 data p(5,1,2) / 177.4 /
9971 data p(5,1,3) / 32.37 /
9972 data p(5,1,4) / 381.2 /
9973 data p(5,1,5) / 1.083 /
9974 data p(5,1,6) / 0 /
9975 data l(5,2) / 0 /
9976 data p(5,2,1) / 29.22 /
9977 data p(5,2,2) / 19.94 /
9978 data p(5,2,3) / 241.5 /
9979 data p(5,2,4) / 3.241 /
9980 data p(5,2,5) / 8.037 /
9981 data p(5,2,6) / 0 /
9982 data l(5,3) / 1 /
9983 data p(5,3,1) / 14.16 /
9984 data p(5,3,2) / 13.91 /
9985 data p(5,3,3) / 122000 /
9986 data p(5,3,4) / 1.364 /
9987 data p(5,3,5) / 11.4 /
9988 data p(5,3,6) / 0.4103 /
9989 data z(6) / 9 /
9990 data n(6) / 3 /
9991 data l(6,1) / 0 /
9992 data p(6,1,1) / 688.3 /
9993 data p(6,1,2) / 239 /
9994 data p(6,1,3) / 22.95 /
9995 data p(6,1,4) / 1257 /
9996 data p(6,1,5) / 0.9638 /
9997 data p(6,1,6) / 0 /
9998 data l(6,2) / 0 /
9999 data p(6,2,1) / 35.93 /
10000 data p(6,2,2) / 25.68 /
10001 data p(6,2,3) / 109.7 /
10002 data p(6,2,4) / 4.297 /
10003 data p(6,2,5) / 7.303 /
10004 data p(6,2,6) / 0 /
10005 data l(6,3) / 1 /
10006 data p(6,3,1) / 17 /
10007 data p(6,3,2) / 16.58 /
10008 data p(6,3,3) / 277500 /
10009 data p(6,3,4) / 1.242 /
10010 data p(6,3,5) / 12.49 /
10011 data p(6,3,6) / 0.3857 /
10012 data z(7) / 10 /
10013 data n(7) / 3 /
10014 data l(7,1) / 0 /
10015 data p(7,1,1) / 858.2 /
10016 data p(7,1,2) / 314.4 /
10017 data p(7,1,3) / 16.64 /
10018 data p(7,1,4) / 204200 /
10019 data p(7,1,5) / 0.845 /
10020 data p(7,1,6) / 0 /
10021 data l(7,2) / 0 /
10022 data p(7,2,1) / 43.24 /
10023 data p(7,2,2) / 32.04 /
10024 data p(7,2,3) / 56.15 /
10025 data p(7,2,4) / 5.808 /
10026 data p(7,2,5) / 6.678 /
10027 data p(7,2,6) / 0 /
10028 data l(7,3) / 1 /
10029 data p(7,3,1) / 20 /
10030 data p(7,3,2) / 20 /
10031 data p(7,3,3) / 16910 /
10032 data p(7,3,4) / 2.442 /
10033 data p(7,3,5) / 10.43 /
10034 data p(7,3,6) / 0.3345 /
10035 data z(8) / 13 /
10036 data n(8) / 5 /
10037 data l(8,1) / 0 /
10038 data p(8,1,1) / 1550 /
10039 data p(8,1,2) / 367 /
10040 data p(8,1,3) / 22.06 /
10041 data p(8,1,4) / 44.05 /
10042 data p(8,1,5) / 1.588 /
10043 data p(8,1,6) / 0 /
10044 data l(8,2) / 0 /
10045 data p(8,2,1) / 119 /
10046 data p(8,2,2) / 55.94 /
10047 data p(8,2,3) / 14.25 /
10048 data p(8,2,4) / 30.94 /
10049 data p(8,2,5) / 4.399 /
10050 data p(8,2,6) / 0 /
10051 data l(8,3) / 1 /
10052 data p(8,3,1) / 80.87 /
10053 data p(8,3,2) / 64.45 /
10054 data p(8,3,3) / 173.5 /
10055 data p(8,3,4) / 11310 /
10056 data p(8,3,5) / 2.762 /
10057 data p(8,3,6) / 0.02337 /
10058 data l(8,4) / 0 /
10059 data p(8,4,1) / 10.16 /
10060 data p(8,4,2) / 12.04 /
10061 data p(8,4,3) / 5.384 /
10062 data p(8,4,4) / 434.1 /
10063 data p(8,4,5) / 4.088 /
10064 data p(8,4,6) / 0 /
10065 data l(8,5) / 1 /
10066 data p(8,5,1) / 4.878 /
10067 data p(8,5,2) / 18.6 /
10068 data p(8,5,3) / 182.8 /
10069 data p(8,5,4) / 2.797 /
10070 data p(8,5,5) / 10.84 /
10071 data p(8,5,6) / 0.3076 /
10072 data z(9) / 14 /
10073 data n(9) / 5 /
10074 data l(9,1) / 0 /
10075 data p(9,1,1) / 1828 /
10076 data p(9,1,2) / 532.2 /
10077 data p(9,1,3) / 11.84 /
10078 data p(9,1,4) / 258 /
10079 data p(9,1,5) / 1.102 /
10080 data p(9,1,6) / 0 /
10081 data l(9,2) / 0 /
10082 data p(9,2,1) / 151.5 /
10083 data p(9,2,2) / 70.17 /
10084 data p(9,2,3) / 11.66 /
10085 data p(9,2,4) / 47.42 /
10086 data p(9,2,5) / 3.933 /
10087 data p(9,2,6) / 0 /
10088 data l(9,3) / 1 /
10089 data p(9,3,1) / 108.2 /
10090 data p(9,3,2) / 78.08 /
10091 data p(9,3,3) / 153.2 /
10092 data p(9,3,4) / 5.765e+06 /
10093 data p(9,3,5) / 2.639 /
10094 data p(9,3,6) / 0.0002774 /
10095 data l(9,4) / 0 /
10096 data p(9,4,1) / 13.61 /
10097 data p(9,4,2) / 14.13 /
10098 data p(9,4,3) / 11.66 /
10099 data p(9,4,4) / 22.88 /
10100 data p(9,4,5) / 5.334 /
10101 data p(9,4,6) / 0 /
10102 data l(9,5) / 1 /
10103 data p(9,5,1) / 6.542 /
10104 data p(9,5,2) / 22.12 /
10105 data p(9,5,3) / 184.5 /
10106 data p(9,5,4) / 3.849 /
10107 data p(9,5,5) / 9.721 /
10108 data p(9,5,6) / 0.2921 /
10109 data z(10) / 18 /
10110 data n(10) / 5 /
10111 data l(10,1) / 0 /
10112 data p(10,1,1) / 3178 /
10113 data p(10,1,2) / 1135 /
10114 data p(10,1,3) / 4.28 /
10115 data p(10,1,4) / 3.285e+07 /
10116 data p(10,1,5) / 0.7631 /
10117 data p(10,1,6) / 0 /
10118 data l(10,2) / 0 /
10119 data p(10,2,1) / 313.5 /
10120 data p(10,2,2) / 130.2 /
10121 data p(10,2,3) / 9.185 /
10122 data p(10,2,4) / 26.93 /
10123 data p(10,2,5) / 4.021 /
10124 data p(10,2,6) / 0 /
10125 data l(10,3) / 1 /
10126 data p(10,3,1) / 247.9 /
10127 data p(10,3,2) / 164.7 /
10128 data p(10,3,3) / 83.72 /
10129 data p(10,3,4) / 54.52 /
10130 data p(10,3,5) / 3.328 /
10131 data p(10,3,6) / 0.627 /
10132 data l(10,4) / 0 /
10133 data p(10,4,1) / 28.92 /
10134 data p(10,4,2) / 25.25 /
10135 data p(10,4,3) / 6.394 /
10136 data p(10,4,4) / 170 /
10137 data p(10,4,5) / 4.223 /
10138 data p(10,4,6) / 0 /
10139 data l(10,5) / 1 /
10140 data p(10,5,1) / 14.49 /
10141 data p(10,5,2) / 38.54 /
10142 data p(10,5,3) / 48.72 /
10143 data p(10,5,4) / 26.4 /
10144 data p(10,5,5) / 6.662 /
10145 data p(10,5,6) / 0.2355 /
10146
10147
10148
10149 Za=Zat(na)
10150
10151
10152 do i=1,pq
10153
10154 if(z(i).eq.Za)then
10155
10156 qshPas(na)=n(i)
10157 do npas=1,qshPas(na)
10158 lPas(npas,na)=l(i,npas)
10159 EthPas(npas,na)=p(i,npas,1)
10160 E0Pas(npas,na)=p(i,npas,2)
10161 sigma0Pas(npas,na)=p(i,npas,3)
10162 yaPas(npas,na)=p(i,npas,4)
10163 PPas(npas,na)=p(i,npas,5)
10164 ywPas(npas,na)=p(i,npas,6)
10165 enddo
10166 go to 110
10167
10168 endif
10169 enddo
10170 *** Warning message commented out (RV 29/6/98).
10171 C if(soo.eq.1)then
10172 C write(oo,*)
10173 C + ' Worning of readPas: atom z=',Za,' is not found.'
10174 C write(oo,*)
10175 C + ' The data will be seached by shellfi, accuracy will be lower.'
10176 C endif
10177 *** End of modification.
10178 110 continue
10179
10180
10181 end
10182
10183
10184
10185 function sigma_nl(E,E0,Eth,yw,l,ya,P,sigma0)
10186
10187 implicit none
10188
10189 real sigma_nl,Fpasc
10190 real E,E0,Eth,yw,ya,P,sigma0
10191 integer l
10192
10193 real Q,y
10194
10195 if(E.ge.Eth)then
10196
10197 Q=5.5+l-0.5*P
10198 y=E/E0
10199 Fpasc=((y-1)*(y-1) + yw*yw) * y**(-Q) * (1.0 + sqrt(y/ya))**(-P)
10200 Fpasc=Fpasc*sigma0
10201
10202 else
10203
10204 Fpasc=0.0
10205
10206 endif
10207
10208 sigma_nl=Fpasc
10209
10210 end
10211
10212 subroutine Pripasc
10213
10214 implicit none
10215
10216 c include 'GoEvent.inc'
10217 +SEQ,GoEvent.
10218 c include 'ener.inc'
10219 +SEQ,ener.
10220 c include 'atoms.inc'
10221 +SEQ,atoms.
10222 c include 'tpasc.inc'
10223 +SEQ,tpasc.
10224
10225 integer na,ns
10226
10227 if(soo.eq.0)return
10228 write(oo,*)
10229 write(oo,*)' Pripasc:'
10230 do na=1,PQat
10231 if(Zat(na).gt.0)then
10232 write(oo,*)' qshPas(na)=',qshPas(na)
10233 write(oo,*)' l,E0,Eth,yw, ya,P,sigma0:'
10234 do ns=1,qshPas(na)
10235 write(oo,'(1X,i3,6e10.3)')lPas(ns,na),E0Pas(ns,na),
10236 + EthPas(ns,na),ywPas(ns,na),yaPas(ns,na),PPas(ns,na),
10237 + sigma0Pas(ns,na)
10238 enddo
10239 endif
10240
10241 enddo
10242
10243 end
10244 +DECK,shellfi.
10245 subroutine shellfi
10246 c
10247 c read shellfi.dat
10248
10249 implicit none
10250
10251 c include 'GoEvent.inc'
10252 +SEQ,GoEvent.
10253 c include 'shellfi.inc'
10254 +SEQ,shellfi.
10255
10256 c integer i,z,n,k,j
10257 integer k1,l
10258 c character*1 a
10259 c integer ios
10260
10261 qash=0 !sign of absence
10262
10263
10264 c The next code is generated by a computer program
10265 c on the basis of data file 'shellfi.dat'.
10266
10267
10268 if(zato.eq.3)then
10269 qash=2
10270 athreshold(1)=5.44515e-05
10271 aweight(1)=0.666667
10272 qaener(1)=36
10273 aener(1,1)=45.9
10274 aphot(1,1)=0
10275 aener(2,1)=50.4
10276 aphot(2,1)=809
10277 aener(3,1)=55.4
10278 aphot(3,1)=6080
10279 aener(4,1)=60.9
10280 aphot(4,1)=8810
10281 aener(5,1)=66.9
10282 aphot(5,1)=8700
10283 aener(6,1)=73.5
10284 aphot(6,1)=7210
10285 aener(7,1)=80.8
10286 aphot(7,1)=5530
10287 aener(8,1)=88.8
10288 aphot(8,1)=4420
10289 aener(9,1)=97.6
10290 aphot(9,1)=3840
10291 aener(10,1)=107
10292 aphot(10,1)=3090
10293 aener(11,1)=118
10294 aphot(11,1)=2520
10295 aener(12,1)=129
10296 aphot(12,1)=2040
10297 aener(13,1)=142
10298 aphot(13,1)=1820
10299 aener(14,1)=156
10300 aphot(14,1)=1460
10301 aener(15,1)=172
10302 aphot(15,1)=1050
10303 aener(16,1)=189
10304 aphot(16,1)=866
10305 aener(17,1)=207
10306 aphot(17,1)=717
10307 aener(18,1)=228
10308 aphot(18,1)=594
10309 aener(19,1)=275
10310 aphot(19,1)=407
10311 aener(20,1)=303
10312 aphot(20,1)=337
10313 aener(21,1)=500
10314 aphot(21,1)=25.0178
10315 aener(22,1)=700
10316 aphot(22,1)=10.0856
10317 aener(23,1)=900
10318 aphot(23,1)=5.11698
10319 aener(24,1)=1100
10320 aphot(24,1)=2.97651
10321 aener(25,1)=1300
10322 aphot(25,1)=1.89593
10323 aener(26,1)=1600
10324 aphot(26,1)=1.08229
10325 aener(27,1)=2000
10326 aphot(27,1)=0.592498
10327 aener(28,1)=4000
10328 aphot(28,1)=0.0888748
10329 aener(29,1)=6000
10330 aphot(29,1)=0.0296249
10331 aener(30,1)=8000
10332 aphot(30,1)=0.0148125
10333 aener(31,1)=10000
10334 aphot(31,1)=0.00888748
10335 aener(32,1)=20000
10336 aphot(32,1)=0.00503624
10337 aener(33,1)=30000
10338 aphot(33,1)=0.00444374
10339 aener(34,1)=40000
10340 aphot(34,1)=0.00414749
10341 aener(35,1)=50000
10342 aphot(35,1)=0.00399937
10343 aener(36,1)=80000
10344 aphot(36,1)=0.00355499
10345 athreshold(2)=1e-05
10346 aweight(2)=0.333333
10347 qaener(2)=29
10348 aener(1,2)=8.4
10349 aphot(1,2)=0
10350 aener(2,2)=9.23
10351 aphot(2,2)=2100
10352 aener(3,2)=10.1
10353 aphot(3,2)=16900
10354 aener(4,2)=11.1
10355 aphot(4,2)=25500
10356 aener(5,2)=12.2
10357 aphot(5,2)=22900
10358 aener(6,2)=13.5
10359 aphot(6,2)=17600
10360 aener(7,2)=14.8
10361 aphot(7,2)=15000
10362 aener(8,2)=16.2
10363 aphot(8,2)=10700
10364 aener(9,2)=17.9
10365 aphot(9,2)=8880
10366 aener(10,2)=19.6
10367 aphot(10,2)=7360
10368 aener(11,2)=21.6
10369 aphot(11,2)=6090
10370 aener(12,2)=23.7
10371 aphot(12,2)=5040
10372 aener(13,2)=26
10373 aphot(13,2)=4180
10374 aener(14,2)=28.6
10375 aphot(14,2)=3460
10376 aener(15,2)=31.5
10377 aphot(15,2)=2860
10378 aener(16,2)=34.6
10379 aphot(16,2)=2370
10380 aener(17,2)=38
10381 aphot(17,2)=1960
10382 aener(18,2)=41.7
10383 aphot(18,2)=1630
10384 aener(19,2)=45.9
10385 aphot(19,2)=1350
10386 aener(20,2)=50.4
10387 aphot(20,2)=1110
10388 aener(21,2)=55.4
10389 aphot(21,2)=923
10390 aener(22,2)=60.9
10391 aphot(22,2)=764
10392 aener(23,2)=66.9
10393 aphot(23,2)=633
10394 aener(24,2)=73.5
10395 aphot(24,2)=524
10396 aener(25,2)=80.8
10397 aphot(25,2)=434
10398 aener(26,2)=88.8
10399 aphot(26,2)=359
10400 aener(27,2)=97.6
10401 aphot(27,2)=0.298
10402 aener(28,2)=107
10403 aphot(28,2)=0.00246
10404 aener(29,2)=118
10405 aphot(29,2)=0.000204
10406 endif
10407 if(zato.eq.6)then
10408 qash=2
10409 athreshold(1)=0.000309
10410 aweight(1)=0.423871
10411 qaener(1)=24
10412 aener(1,1)=228
10413 aphot(1,1)=16900
10414 aener(2,1)=251
10415 aphot(2,1)=23300
10416 aener(3,1)=275
10417 aphot(3,1)=30700
10418 aener(4,1)=303
10419 aphot(4,1)=38600
10420 aener(5,1)=333
10421 aphot(5,1)=37200
10422 aener(6,1)=365
10423 aphot(6,1)=31200
10424 aener(7,1)=402
10425 aphot(7,1)=24900
10426 aener(8,1)=441
10427 aphot(8,1)=20900
10428 aener(9,1)=485
10429 aphot(9,1)=18000
10430 aener(10,1)=533
10431 aphot(10,1)=14800
10432 aener(11,1)=586
10433 aphot(11,1)=11400
10434 aener(12,1)=644
10435 aphot(12,1)=8620
10436 aener(13,1)=707
10437 aphot(13,1)=7090
10438 aener(14,1)=777
10439 aphot(14,1)=5440
10440 aener(15,1)=854
10441 aphot(15,1)=3960
10442 aener(16,1)=939
10443 aphot(16,1)=3080
10444 aener(17,1)=1030
10445 aphot(17,1)=2400
10446 aener(18,1)=3500
10447 aphot(18,1)=60
10448 aener(19,1)=4000
10449 aphot(19,1)=33
10450 aener(20,1)=10000
10451 aphot(20,1)=2
10452 aener(21,1)=20000
10453 aphot(21,1)=0.4
10454 aener(22,1)=30000
10455 aphot(22,1)=0.27
10456 aener(23,1)=50000
10457 aphot(23,1)=0.2
10458 aener(24,1)=100000
10459 aphot(24,1)=0.17
10460 athreshold(2)=1.03321e-05
10461 aweight(2)=0.576129
10462 qaener(2)=14
10463 aener(1,2)=6.19927
10464 aphot(1,2)=0
10465 aener(2,2)=8.26569
10466 aphot(2,2)=0
10467 aener(3,2)=10.3321
10468 aphot(3,2)=12.6
10469 aener(4,2)=12.3985
10470 aphot(4,2)=11.2
10471 aener(5,2)=15.4982
10472 aphot(5,2)=9.1
10473 aener(6,2)=20.6642
10474 aphot(6,2)=7.3
10475 aener(7,2)=30.9964
10476 aphot(7,2)=4.4
10477 aener(8,2)=41.3285
10478 aphot(8,2)=2.9
10479 aener(9,2)=61.9927
10480 aphot(9,2)=1.45
10481 aener(10,2)=82.6569
10482 aphot(10,2)=0.88
10483 aener(11,2)=103.321
10484 aphot(11,2)=0.59
10485 aener(12,2)=123.985
10486 aphot(12,2)=0.4
10487 aener(13,2)=154.982
10488 aphot(13,2)=0.24
10489 aener(14,2)=206.642
10490 aphot(14,2)=0.108
10491 endif
10492 if(zato.eq.7)then
10493 qash=2
10494 athreshold(1)=0.000413
10495 aweight(1)=0.318257
10496 qaener(1)=8
10497 aener(1,1)=309.964
10498 aphot(1,1)=0.07
10499 aener(2,1)=413.285
10500 aphot(2,1)=0.68
10501 aener(3,1)=619.927
10502 aphot(3,1)=0.255
10503 aener(4,1)=826.569
10504 aphot(4,1)=0.125
10505 aener(5,1)=1033.21
10506 aphot(5,1)=0.075
10507 aener(6,1)=1239.85
10508 aphot(6,1)=0.047
10509 aener(7,1)=1549.82
10510 aphot(7,1)=0.026
10511 aener(8,1)=2066.42
10512 aphot(8,1)=0.012
10513 athreshold(2)=1.23985e-05
10514 aweight(2)=0.681743
10515 qaener(2)=15
10516 aener(1,2)=6.19927
10517 aphot(1,2)=0
10518 aener(2,2)=8.26569
10519 aphot(2,2)=0
10520 aener(3,2)=10.3321
10521 aphot(3,2)=0
10522 aener(4,2)=12.3985
10523 aphot(4,2)=11.95
10524 aener(5,2)=15.4982
10525 aphot(5,2)=11.9
10526 aener(6,2)=20.6642
10527 aphot(6,2)=9.65
10528 aener(7,2)=30.9964
10529 aphot(7,2)=7.8
10530 aener(8,2)=41.3285
10531 aphot(8,2)=5.4
10532 aener(9,2)=61.9927
10533 aphot(9,2)=2.9
10534 aener(10,2)=82.6569
10535 aphot(10,2)=1.75
10536 aener(11,2)=103.321
10537 aphot(11,2)=1.1
10538 aener(12,2)=123.985
10539 aphot(12,2)=0.65
10540 aener(13,2)=154.982
10541 aphot(13,2)=0.39
10542 aener(14,2)=206.642
10543 aphot(14,2)=0.208
10544 aener(15,2)=309.964
10545 aphot(15,2)=0.07
10546 endif
10547 if(zato.eq.8)then
10548 qash=2
10549 athreshold(1)=0.00062
10550 aweight(1)=0.240404
10551 qaener(1)=20
10552 aener(1,1)=586
10553 aphot(1,1)=13300
10554 aener(2,1)=644
10555 aphot(2,1)=14200
10556 aener(3,1)=707
10557 aphot(3,1)=11800
10558 aener(4,1)=777
10559 aphot(4,1)=9270
10560 aener(5,1)=854
10561 aphot(5,1)=7100
10562 aener(6,1)=939
10563 aphot(6,1)=5880
10564 aener(7,1)=1030
10565 aphot(7,1)=4660
10566 aener(8,1)=1130
10567 aphot(8,1)=3690
10568 aener(9,1)=1250
10569 aphot(9,1)=2790
10570 aener(10,1)=1370
10571 aphot(10,1)=2260
10572 aener(11,1)=1500
10573 aphot(11,1)=1740
10574 aener(12,1)=1650
10575 aphot(12,1)=1340
10576 aener(13,1)=1820
10577 aphot(13,1)=1060
10578 aener(14,1)=3500
10579 aphot(14,1)=187.5
10580 aener(15,1)=4000
10581 aphot(15,1)=118.125
10582 aener(16,1)=10000
10583 aphot(16,1)=6.75
10584 aener(17,1)=20000
10585 aphot(17,1)=0.9
10586 aener(18,1)=30000
10587 aphot(18,1)=0.39375
10588 aener(19,1)=50000
10589 aphot(19,1)=0.255
10590 aener(20,1)=100000
10591 aphot(20,1)=0.19875
10592 athreshold(2)=2.06642e-05
10593 aweight(2)=0.759596
10594 qaener(2)=16
10595 aener(1,2)=6.19927
10596 aphot(1,2)=0
10597 aener(2,2)=8.26569
10598 aphot(2,2)=0
10599 aener(3,2)=10.3321
10600 aphot(3,2)=0
10601 aener(4,2)=12.3985
10602 aphot(4,2)=0
10603 aener(5,2)=15.4982
10604 aphot(5,2)=9
10605 aener(6,2)=20.6642
10606 aphot(6,2)=9.65
10607 aener(7,2)=30.9964
10608 aphot(7,2)=8.75
10609 aener(8,2)=41.3285
10610 aphot(8,2)=7.42
10611 aener(9,2)=61.9927
10612 aphot(9,2)=4.65
10613 aener(10,2)=82.6569
10614 aphot(10,2)=2.7
10615 aener(11,2)=103.321
10616 aphot(11,2)=1.77
10617 aener(12,2)=123.985
10618 aphot(12,2)=1.12
10619 aener(13,2)=154.982
10620 aphot(13,2)=0.7
10621 aener(14,2)=206.642
10622 aphot(14,2)=0.385
10623 aener(15,2)=309.964
10624 aphot(15,2)=0.16
10625 aener(16,2)=413.285
10626 aphot(16,2)=0.065
10627 endif
10628 if(zato.eq.9)then
10629 qash=2
10630 athreshold(1)=0.000827
10631 aweight(1)=0.185727
10632 qaener(1)=6
10633 aener(1,1)=619.927
10634 aphot(1,1)=0.05
10635 aener(2,1)=826.569
10636 aphot(2,1)=0.305
10637 aener(3,1)=1033.21
10638 aphot(3,1)=0.17
10639 aener(4,1)=1239.85
10640 aphot(4,1)=0.115
10641 aener(5,1)=1549.82
10642 aphot(5,1)=0.067
10643 aener(6,1)=2066.42
10644 aphot(6,1)=0.03
10645 athreshold(2)=3.09964e-05
10646 aweight(2)=0.814273
10647 qaener(2)=17
10648 aener(1,2)=6.19927
10649 aphot(1,2)=0
10650 aener(2,2)=8.26569
10651 aphot(2,2)=0
10652 aener(3,2)=10.3321
10653 aphot(3,2)=0
10654 aener(4,2)=12.3985
10655 aphot(4,2)=0
10656 aener(5,2)=15.4982
10657 aphot(5,2)=0
10658 aener(6,2)=20.6642
10659 aphot(6,2)=0
10660 aener(7,2)=30.9964
10661 aphot(7,2)=10.6
10662 aener(8,2)=41.3285
10663 aphot(8,2)=10.1
10664 aener(9,2)=61.9927
10665 aphot(9,2)=6.7
10666 aener(10,2)=82.6569
10667 aphot(10,2)=4.1
10668 aener(11,2)=103.321
10669 aphot(11,2)=2.6
10670 aener(12,2)=123.985
10671 aphot(12,2)=1.8
10672 aener(13,2)=154.982
10673 aphot(13,2)=1.3
10674 aener(14,2)=206.642
10675 aphot(14,2)=0.59
10676 aener(15,2)=309.964
10677 aphot(15,2)=0.245
10678 aener(16,2)=413.285
10679 aphot(16,2)=0.124
10680 aener(17,2)=619.927
10681 aphot(17,2)=0.05
10682 endif
10683 if(zato.eq.10)then
10684 qash=2
10685 athreshold(1)=0.001033
10686 aweight(1)=0.117826
10687 qaener(1)=5
10688 aener(1,1)=826.569
10689 aphot(1,1)=0.03
10690 aener(2,1)=1033.21
10691 aphot(2,1)=0.205
10692 aener(3,1)=1239.85
10693 aphot(3,1)=0.135
10694 aener(4,1)=1549.82
10695 aphot(4,1)=0.077
10696 aener(5,1)=2066.42
10697 aphot(5,1)=0.039
10698 athreshold(2)=3.09964e-05
10699 aweight(2)=0.882174
10700 qaener(2)=18
10701 aener(1,2)=6.19927
10702 aphot(1,2)=0
10703 aener(2,2)=8.26569
10704 aphot(2,2)=0
10705 aener(3,2)=10.3321
10706 aphot(3,2)=0
10707 aener(4,2)=12.3985
10708 aphot(4,2)=0
10709 aener(5,2)=15.4982
10710 aphot(5,2)=0
10711 aener(6,2)=20.6642
10712 aphot(6,2)=5.85
10713 aener(7,2)=30.9964
10714 aphot(7,2)=8.8
10715 aener(8,2)=41.3285
10716 aphot(8,2)=8.7
10717 aener(9,2)=61.9927
10718 aphot(9,2)=7.3
10719 aener(10,2)=82.6569
10720 aphot(10,2)=5.6
10721 aener(11,2)=103.321
10722 aphot(11,2)=4
10723 aener(12,2)=123.985
10724 aphot(12,2)=2.8
10725 aener(13,2)=154.982
10726 aphot(13,2)=1.75
10727 aener(14,2)=206.642
10728 aphot(14,2)=0.91
10729 aener(15,2)=309.964
10730 aphot(15,2)=0.36
10731 aener(16,2)=413.285
10732 aphot(16,2)=0.17
10733 aener(17,2)=619.927
10734 aphot(17,2)=0.063
10735 aener(18,2)=826.569
10736 aphot(18,2)=0.03
10737 endif
10738 if(zato.eq.17)then
10739 qash=4
10740 athreshold(1)=0.003485
10741 aweight(1)=0.117088
10742 qaener(1)=69
10743 aener(1,1)=3365.37
10744 aphot(1,1)=0
10745 aener(2,1)=3536.21
10746 aphot(2,1)=0.050227
10747 aener(3,1)=3715.72
10748 aphot(3,1)=0.0574
10749 aener(4,1)=3904.35
10750 aphot(4,1)=0.051988
10751 aener(5,1)=4102.55
10752 aphot(5,1)=0.047086
10753 aener(6,1)=4310.81
10754 aphot(6,1)=0.042647
10755 aener(7,1)=4529.65
10756 aphot(7,1)=0.038625
10757 aener(8,1)=4759.59
10758 aphot(8,1)=0.034983
10759 aener(9,1)=5001.2
10760 aphot(9,1)=0.031685
10761 aener(10,1)=5255.08
10762 aphot(10,1)=0.028697
10763 aener(11,1)=5521.85
10764 aphot(11,1)=0.025992
10765 aener(12,1)=5802.16
10766 aphot(12,1)=0.023541
10767 aener(13,1)=6096.71
10768 aphot(13,1)=0.021321
10769 aener(14,1)=6406.2
10770 aphot(14,1)=0.019311
10771 aener(15,1)=6731.4
10772 aphot(15,1)=0.01749
10773 aener(16,1)=7073.12
10774 aphot(16,1)=0.015841
10775 aener(17,1)=7432.17
10776 aphot(17,1)=0.014347
10777 aener(18,1)=7809.46
10778 aphot(18,1)=0.012995
10779 aener(19,1)=8205.9
10780 aphot(19,1)=0.011769
10781 aener(20,1)=8622.46
10782 aphot(20,1)=0.01066
10783 aener(21,1)=9060.17
10784 aphot(21,1)=0.009654
10785 aener(22,1)=9520.11
10786 aphot(22,1)=0.008744
10787 aener(23,1)=10003.4
10788 aphot(23,1)=0.00792
10789 aener(24,1)=10511.2
10790 aphot(24,1)=0.007173
10791 aener(25,1)=11044.8
10792 aphot(25,1)=0.006497
10793 aener(26,1)=11605.5
10794 aphot(26,1)=0.005884
10795 aener(27,1)=12194.6
10796 aphot(27,1)=0.005329
10797 aener(28,1)=12813.6
10798 aphot(28,1)=0.004827
10799 aener(29,1)=13464.1
10800 aphot(29,1)=0.004372
10801 aener(30,1)=14147.6
10802 aphot(30,1)=0.003959
10803 aener(31,1)=14865.8
10804 aphot(31,1)=0.003586
10805 aener(32,1)=15620.4
10806 aphot(32,1)=0.003248
10807 aener(33,1)=16413.4
10808 aphot(33,1)=0.002942
10809 aener(34,1)=17246.6
10810 aphot(34,1)=0.002664
10811 aener(35,1)=18122.1
10812 aphot(35,1)=0.002413
10813 aener(36,1)=19042.1
10814 aphot(36,1)=0.002186
10815 aener(37,1)=20008.7
10816 aphot(37,1)=0.00198
10817 aener(38,1)=21024.4
10818 aphot(38,1)=0.001793
10819 aener(39,1)=22091.7
10820 aphot(39,1)=0.001624
10821 aener(40,1)=23213.2
10822 aphot(40,1)=0.001471
10823 aener(41,1)=24391.6
10824 aphot(41,1)=0.001332
10825 aener(42,1)=25629.8
10826 aphot(42,1)=0.001206
10827 aener(43,1)=26930.9
10828 aphot(43,1)=0.001093
10829 aener(44,1)=28298
10830 aphot(44,1)=0.00099
10831 aener(45,1)=29734.5
10832 aphot(45,1)=0.000896
10833 aener(46,1)=31243.9
10834 aphot(46,1)=0.000812
10835 aener(47,1)=32830
10836 aphot(47,1)=0.000735
10837 aener(48,1)=34496.6
10838 aphot(48,1)=0.000666
10839 aener(49,1)=36247.8
10840 aphot(49,1)=0.000603
10841 aener(50,1)=38087.9
10842 aphot(50,1)=0.000546
10843 aener(51,1)=40021.3
10844 aphot(51,1)=0.000495
10845 aener(52,1)=42053
10846 aphot(52,1)=0.000448
10847 aener(53,1)=44187.8
10848 aphot(53,1)=0.000406
10849 aener(54,1)=46430.9
10850 aphot(54,1)=0.000368
10851 aener(55,1)=48787.9
10852 aphot(55,1)=0.000333
10853 aener(56,1)=51264.6
10854 aphot(56,1)=0.000302
10855 aener(57,1)=53867
10856 aphot(57,1)=0.000273
10857 aener(58,1)=56601.5
10858 aphot(58,1)=0.000247
10859 aener(59,1)=59474.8
10860 aphot(59,1)=0.000224
10861 aener(60,1)=62494
10862 aphot(60,1)=0.000203
10863 aener(61,1)=65666.4
10864 aphot(61,1)=0.000184
10865 aener(62,1)=68999.9
10866 aphot(62,1)=0.000166
10867 aener(63,1)=72502.6
10868 aphot(63,1)=0.000151
10869 aener(64,1)=76183.1
10870 aphot(64,1)=0.000137
10871 aener(65,1)=80050.5
10872 aphot(65,1)=0.000124
10873 aener(66,1)=84114.2
10874 aphot(66,1)=0.000112
10875 aener(67,1)=88384.1
10876 aphot(67,1)=0.000101
10877 aener(68,1)=92870.9
10878 aphot(68,1)=9.18846e-05
10879 aener(69,1)=97585.4
10880 aphot(69,1)=8.32209e-05
10881 athreshold(2)=0.000207
10882 aweight(2)=0.635323
10883 qaener(2)=10
10884 aener(1,2)=154.982
10885 aphot(1,2)=0.6
10886 aener(2,2)=206.642
10887 aphot(2,2)=6.4
10888 aener(3,2)=309.964
10889 aphot(3,2)=2.45
10890 aener(4,2)=413.285
10891 aphot(4,2)=1.4
10892 aener(5,2)=619.927
10893 aphot(5,2)=0.45
10894 aener(6,2)=826.569
10895 aphot(6,2)=0.22
10896 aener(7,2)=1033.21
10897 aphot(7,2)=0.123
10898 aener(8,2)=1239.85
10899 aphot(8,2)=0.079
10900 aener(9,2)=1549.82
10901 aphot(9,2)=0.047
10902 aener(10,2)=2066.42
10903 aphot(10,2)=0.0195
10904 athreshold(3)=6.19927e-05
10905 aweight(3)=0.061546
10906 qaener(3)=6
10907 aener(1,3)=41.3285
10908 aphot(1,3)=1.07
10909 aener(2,3)=61.9927
10910 aphot(2,3)=1.35
10911 aener(3,3)=82.6569
10912 aphot(3,3)=1.22
10913 aener(4,3)=103.321
10914 aphot(4,3)=1
10915 aener(5,3)=123.985
10916 aphot(5,3)=0.82
10917 aener(6,3)=154.982
10918 aphot(6,3)=0.6
10919 athreshold(4)=1.54982e-05
10920 aweight(4)=0.186043
10921 qaener(4)=8
10922 aener(1,4)=6.19927
10923 aphot(1,4)=0
10924 aener(2,4)=8.26569
10925 aphot(2,4)=0
10926 aener(3,4)=10.3321
10927 aphot(3,4)=0
10928 aener(4,4)=12.3985
10929 aphot(4,4)=0
10930 aener(5,4)=15.4982
10931 aphot(5,4)=59
10932 aener(6,4)=20.6642
10933 aphot(6,4)=11
10934 aener(7,4)=30.9964
10935 aphot(7,4)=1.35
10936 aener(8,4)=41.3285
10937 aphot(8,4)=1.07
10938 endif
10939 if(zato.eq.18)then
10940 qash=4
10941 athreshold(1)=0.003934
10942 aweight(1)=0.114211
10943 qaener(1)=67
10944 aener(1,1)=3715.72
10945 aphot(1,1)=0
10946 aener(2,1)=3904.35
10947 aphot(2,1)=0.020435
10948 aener(3,1)=4102.55
10949 aphot(3,1)=0.053399
10950 aener(4,1)=4310.81
10951 aphot(4,1)=0.048364
10952 aener(5,1)=4529.65
10953 aphot(5,1)=0.043804
10954 aener(6,1)=4759.59
10955 aphot(6,1)=0.039674
10956 aener(7,1)=5001.2
10957 aphot(7,1)=0.035933
10958 aener(8,1)=5255.08
10959 aphot(8,1)=0.032545
10960 aener(9,1)=5521.85
10961 aphot(9,1)=0.029476
10962 aener(10,1)=5802.16
10963 aphot(10,1)=0.026697
10964 aener(11,1)=6096.71
10965 aphot(11,1)=0.02418
10966 aener(12,1)=6406.2
10967 aphot(12,1)=0.0219
10968 aener(13,1)=6731.4
10969 aphot(13,1)=0.019835
10970 aener(14,1)=7073.12
10971 aphot(14,1)=0.017965
10972 aener(15,1)=7432.17
10973 aphot(15,1)=0.016271
10974 aener(16,1)=7809.46
10975 aphot(16,1)=0.014737
10976 aener(17,1)=8205.9
10977 aphot(17,1)=0.013347
10978 aener(18,1)=8622.46
10979 aphot(18,1)=0.012089
10980 aener(19,1)=9060.17
10981 aphot(19,1)=0.010949
10982 aener(20,1)=9520.11
10983 aphot(20,1)=0.009917
10984 aener(21,1)=10003.4
10985 aphot(21,1)=0.008982
10986 aener(22,1)=10511.2
10987 aphot(22,1)=0.008135
10988 aener(23,1)=11044.8
10989 aphot(23,1)=0.007368
10990 aener(24,1)=11605.5
10991 aphot(24,1)=0.006673
10992 aener(25,1)=12194.6
10993 aphot(25,1)=0.006044
10994 aener(26,1)=12813.6
10995 aphot(26,1)=0.005474
10996 aener(27,1)=13464.1
10997 aphot(27,1)=0.004958
10998 aener(28,1)=14147.6
10999 aphot(28,1)=0.00449
11000 aener(29,1)=14865.8
11001 aphot(29,1)=0.004067
11002 aener(30,1)=15620.4
11003 aphot(30,1)=0.003683
11004 aener(31,1)=16413.4
11005 aphot(31,1)=0.003336
11006 aener(32,1)=17246.6
11007 aphot(32,1)=0.003022
11008 aener(33,1)=18122.1
11009 aphot(33,1)=0.002737
11010 aener(34,1)=19042.1
11011 aphot(34,1)=0.002479
11012 aener(35,1)=20008.7
11013 aphot(35,1)=0.002245
11014 aener(36,1)=21024.4
11015 aphot(36,1)=0.002033
11016 aener(37,1)=22091.7
11017 aphot(37,1)=0.001842
11018 aener(38,1)=23213.2
11019 aphot(38,1)=0.001668
11020 aener(39,1)=24391.6
11021 aphot(39,1)=0.001511
11022 aener(40,1)=25629.8
11023 aphot(40,1)=0.001368
11024 aener(41,1)=26930.9
11025 aphot(41,1)=0.001239
11026 aener(42,1)=28298
11027 aphot(42,1)=0.001122
11028 aener(43,1)=29734.5
11029 aphot(43,1)=0.001017
11030 aener(44,1)=31243.9
11031 aphot(44,1)=0.000921
11032 aener(45,1)=32830
11033 aphot(45,1)=0.000834
11034 aener(46,1)=34496.6
11035 aphot(46,1)=0.000755
11036 aener(47,1)=36247.8
11037 aphot(47,1)=0.000684
11038 aener(48,1)=38087.9
11039 aphot(48,1)=0.00062
11040 aener(49,1)=40021.3
11041 aphot(49,1)=0.000561
11042 aener(50,1)=42053
11043 aphot(50,1)=0.000508
11044 aener(51,1)=44187.8
11045 aphot(51,1)=0.00046
11046 aener(52,1)=46430.9
11047 aphot(52,1)=0.000417
11048 aener(53,1)=48787.9
11049 aphot(53,1)=0.000378
11050 aener(54,1)=51264.6
11051 aphot(54,1)=0.000342
11052 aener(55,1)=53867
11053 aphot(55,1)=0.00031
11054 aener(56,1)=56601.5
11055 aphot(56,1)=0.000281
11056 aener(57,1)=59474.8
11057 aphot(57,1)=0.000254
11058 aener(58,1)=62494
11059 aphot(58,1)=0.00023
11060 aener(59,1)=65666.4
11061 aphot(59,1)=0.000208
11062 aener(60,1)=68999.9
11063 aphot(60,1)=0.000189
11064 aener(61,1)=72502.6
11065 aphot(61,1)=0.000171
11066 aener(62,1)=76183.1
11067 aphot(62,1)=0.000155
11068 aener(63,1)=80050.5
11069 aphot(63,1)=0.00014
11070 aener(64,1)=84114.2
11071 aphot(64,1)=0.000127
11072 aener(65,1)=88384.1
11073 aphot(65,1)=0.000115
11074 aener(66,1)=92870.9
11075 aphot(66,1)=0.000104
11076 aener(67,1)=97585.4
11077 aphot(67,1)=9.43788e-05
11078 athreshold(2)=0.00031
11079 aweight(2)=0.438551
11080 qaener(2)=10
11081 aener(1,2)=206.642
11082 aphot(1,2)=0.55
11083 aener(2,2)=309.964
11084 aphot(2,2)=2.52
11085 aener(3,2)=413.285
11086 aphot(3,2)=1.66
11087 aener(4,2)=619.927
11088 aphot(4,2)=0.62
11089 aener(5,2)=826.569
11090 aphot(5,2)=0.29
11091 aener(6,2)=1033.21
11092 aphot(6,2)=0.16
11093 aener(7,2)=1239.85
11094 aphot(7,2)=0.1
11095 aener(8,2)=1549.82
11096 aphot(8,2)=0.06
11097 aener(9,2)=2066.42
11098 aphot(9,2)=0.026
11099 aener(10,2)=3099.64
11100 aphot(10,2)=0.0085
11101 athreshold(3)=6.19927e-05
11102 aweight(3)=0.092874
11103 qaener(3)=7
11104 aener(1,3)=41.3285
11105 aphot(1,3)=1
11106 aener(2,3)=61.9927
11107 aphot(2,3)=1.52
11108 aener(3,3)=82.6569
11109 aphot(3,3)=1.52
11110 aener(4,3)=103.321
11111 aphot(4,3)=1.33
11112 aener(5,3)=123.985
11113 aphot(5,3)=1.1
11114 aener(6,3)=154.982
11115 aphot(6,3)=0.85
11116 aener(7,3)=206.642
11117 aphot(7,3)=0.55
11118 athreshold(4)=1.54982e-05
11119 aweight(4)=0.354364
11120 qaener(4)=8
11121 aener(1,4)=6.19927
11122 aphot(1,4)=0
11123 aener(2,4)=8.26569
11124 aphot(2,4)=0
11125 aener(3,4)=10.3321
11126 aphot(3,4)=0
11127 aener(4,4)=12.3985
11128 aphot(4,4)=0
11129 aener(5,4)=15.4982
11130 aphot(5,4)=60
11131 aener(6,4)=20.6642
11132 aphot(6,4)=52.5
11133 aener(7,4)=30.9964
11134 aphot(7,4)=2
11135 aener(8,4)=41.3285
11136 aphot(8,4)=1
11137 endif
11138 if(zato.eq.36)then
11139 qash=4
11140 athreshold(1)=0.015498
11141 aweight(1)=0.04453
11142 qaener(1)=4
11143 aener(1,1)=12398.5
11144 aphot(1,1)=0.0032
11145 aener(2,1)=15498.2
11146 aphot(2,1)=0.0205
11147 aener(3,1)=20664.2
11148 aphot(3,1)=0.0079
11149 aener(4,1)=30996.4
11150 aphot(4,1)=0.0022
11151 athreshold(2)=0.00155
11152 aweight(2)=0.262277
11153 qaener(2)=9
11154 aener(1,2)=1239.85
11155 aphot(1,2)=0.22
11156 aener(2,2)=1549.82
11157 aphot(2,2)=0.7
11158 aener(3,2)=2066.42
11159 aphot(3,2)=0.41
11160 aener(4,2)=3099.64
11161 aphot(4,2)=0.14
11162 aener(5,2)=4132.85
11163 aphot(5,2)=0.061
11164 aener(6,2)=6199.27
11165 aphot(6,2)=0.02
11166 aener(7,2)=8265.69
11167 aphot(7,2)=0.0096
11168 aener(8,2)=10332.1
11169 aphot(8,2)=0.0053
11170 aener(9,2)=12398.5
11171 aphot(9,2)=0.0032
11172 athreshold(3)=0.000207
11173 aweight(3)=0.594165
11174 qaener(3)=11
11175 aener(1,3)=82.6569
11176 aphot(1,3)=0.7
11177 aener(2,3)=103.321
11178 aphot(2,3)=1.2
11179 aener(3,3)=123.985
11180 aphot(3,3)=3.4
11181 aener(4,3)=154.982
11182 aphot(4,3)=6.1
11183 aener(5,3)=206.642
11184 aphot(5,3)=6.8
11185 aener(6,3)=309.964
11186 aphot(6,3)=4.4
11187 aener(7,3)=413.285
11188 aphot(7,3)=2.65
11189 aener(8,3)=619.927
11190 aphot(8,3)=0.95
11191 aener(9,3)=826.569
11192 aphot(9,3)=0.54
11193 aener(10,3)=1033.21
11194 aphot(10,3)=0.34
11195 aener(11,3)=1239.85
11196 aphot(11,3)=0.22
11197 athreshold(4)=1.54982e-05
11198 aweight(4)=0.099027
11199 qaener(4)=10
11200 aener(1,4)=6.19927
11201 aphot(1,4)=0
11202 aener(2,4)=8.26569
11203 aphot(2,4)=0
11204 aener(3,4)=10.3321
11205 aphot(3,4)=0
11206 aener(4,4)=12.3985
11207 aphot(4,4)=0
11208 aener(5,4)=15.4982
11209 aphot(5,4)=60
11210 aener(6,4)=20.6642
11211 aphot(6,4)=7.2
11212 aener(7,4)=30.9964
11213 aphot(7,4)=1.75
11214 aener(8,4)=41.3285
11215 aphot(8,4)=1.05
11216 aener(9,4)=61.9927
11217 aphot(9,4)=0.75
11218 aener(10,4)=82.6569
11219 aphot(10,4)=0.7
11220 endif
11221 if(zato.eq.54)then
11222 qash=6
11223 athreshold(1)=0.041328
11224 aweight(1)=0.017971
11225 qaener(1)=3
11226 aener(1,1)=30996.4
11227 aphot(1,1)=0.0013
11228 aener(2,1)=41328.5
11229 aphot(2,1)=0.0046
11230 aener(3,1)=61992.7
11231 aphot(3,1)=0.0015
11232 athreshold(2)=0.006199
11233 aweight(2)=0.114379
11234 qaener(2)=7
11235 aener(1,2)=4132.85
11236 aphot(1,2)=0.071
11237 aener(2,2)=6199.27
11238 aphot(2,2)=0.11
11239 aener(3,2)=8265.69
11240 aphot(3,2)=0.051
11241 aener(4,2)=12398.5
11242 aphot(4,2)=0.017
11243 aener(5,2)=15498.2
11244 aphot(5,2)=0.009
11245 aener(6,2)=20664.2
11246 aphot(6,2)=0.004
11247 aener(7,2)=30996.4
11248 aphot(7,2)=0.0013
11249 athreshold(3)=0.000827
11250 aweight(3)=0.411049
11251 qaener(3)=8
11252 aener(1,3)=619.927
11253 aphot(1,3)=0.63
11254 aener(2,3)=826.569
11255 aphot(2,3)=2.3
11256 aener(3,3)=1033.21
11257 aphot(3,3)=1.8
11258 aener(4,3)=1239.85
11259 aphot(4,3)=1.37
11260 aener(5,3)=1549.82
11261 aphot(5,3)=0.86
11262 aener(6,3)=2066.42
11263 aphot(6,3)=0.42
11264 aener(7,3)=3099.64
11265 aphot(7,3)=0.15
11266 aener(8,3)=4132.85
11267 aphot(8,3)=0.071
11268 athreshold(4)=0.00031
11269 aweight(4)=0.075061
11270 qaener(4)=4
11271 aener(1,4)=206.642
11272 aphot(1,4)=1
11273 aener(2,4)=309.964
11274 aphot(2,4)=1.15
11275 aener(3,4)=413.285
11276 aphot(3,4)=1
11277 aener(4,4)=619.927
11278 aphot(4,4)=0.63
11279 athreshold(5)=8.26569e-05
11280 aweight(5)=0.273675
11281 qaener(5)=6
11282 aener(1,5)=61.9927
11283 aphot(1,5)=0.67
11284 aener(2,5)=82.6569
11285 aphot(2,5)=48
11286 aener(3,5)=103.321
11287 aphot(3,5)=14
11288 aener(4,5)=123.985
11289 aphot(4,5)=2.5
11290 aener(5,5)=154.982
11291 aphot(5,5)=1.1
11292 aener(6,5)=206.642
11293 aphot(6,5)=1
11294 athreshold(6)=1.23985e-05
11295 aweight(6)=0.107866
11296 qaener(6)=9
11297 aener(1,6)=6.19927
11298 aphot(1,6)=0
11299 aener(2,6)=8.26569
11300 aphot(2,6)=0
11301 aener(3,6)=10.3321
11302 aphot(3,6)=0
11303 aener(4,6)=12.3985
11304 aphot(4,6)=110
11305 aener(5,6)=15.4982
11306 aphot(5,6)=37
11307 aener(6,6)=20.6642
11308 aphot(6,6)=10
11309 aener(7,6)=30.9964
11310 aphot(7,6)=2.2
11311 aener(8,6)=41.3285
11312 aphot(8,6)=1.1
11313 aener(9,6)=61.9927
11314 aphot(9,6)=0.67
11315 endif
11316
11317 c end of computer code
11318
11319
11320 do k1=1,qash
11321 do l=1,qaener(k1)
11322
11323
11324 aener(l,k1)=aener(l,k1)*1.e-6
11325
11326 enddo
11327 enddo
11328
11329
11330 if(soo.eq.1)then
11331 if(qash.eq.0)then
11332 write(oo,*)' Worning of shellfi: atom z=',zato,' is not found.'
11333 write(oo,*)
11334 + ' The data will be seached by shteor, accuracy will be lower.'
11335
11336 endif
11337 endif
11338
11339 c call prishellfi
11340
11341 end
11342
11343
11344 subroutine shteor(num)
11345
11346 c read shteor.dat
11347
11348 implicit none
11349
11350 c include 'shellfi.inc'
11351 +SEQ,shellfi.
11352 c include 'LibAtMat.inc'
11353 +SEQ,LibAtMat.
11354
11355 integer num
11356
11357 c character*1 a
11358 c integer i,z,n,k
11359
11360 qash=0
11361
11362
11363 c The next code is generated
11364 c by a computer program
11365 c using a readable data file
11366
11367
11368
11369 if(zato.eq.1)then
11370 c if(num.eq.num_H)then
11371 qash=1
11372 athreshold(1)=1e-05
11373 aweight(1)=1
11374 c endif
11375 if(num.eq.num_H3)then ! for CH4
11376 qash=1
11377 athreshold(1)=15.2e-06
11378 aweight(1)=1
11379 endif
11380 endif
11381 if(zato.eq.2)then
11382 qash=1
11383 athreshold(1)=1.36129e-05
11384 aweight(1)=1
11385 endif
11386 if(zato.eq.3)then
11387 qash=2
11388 athreshold(1)=5.44515e-05
11389 aweight(1)=0.666667
11390 athreshold(2)=1e-05
11391 aweight(2)=0.333333
11392 endif
11393 if(zato.eq.4)then
11394 qash=2
11395 athreshold(1)=0.000123
11396 aweight(1)=0.5
11397 athreshold(2)=1e-05
11398 aweight(2)=0.5
11399 endif
11400 if(zato.eq.5)then
11401 qash=2
11402 athreshold(1)=0.000218
11403 aweight(1)=0.4
11404 athreshold(2)=1e-05
11405 aweight(2)=0.6
11406 endif
11407 if(zato.eq.6)then
11408 qash=2
11409 athreshold(1)=0.00034
11410 aweight(1)=0.333333
11411 athreshold(2)=1.36129e-05
11412 aweight(2)=0.666667
11413 endif
11414 if(zato.eq.7)then
11415 qash=2
11416 athreshold(1)=0.00049
11417 aweight(1)=0.285714
11418 athreshold(2)=2.12701e-05
11419 aweight(2)=0.714286
11420 endif
11421 if(zato.eq.8)then
11422 qash=2
11423 athreshold(1)=0.000667
11424 aweight(1)=0.25
11425 athreshold(2)=3.0629e-05
11426 aweight(2)=0.75
11427 endif
11428 if(zato.eq.9)then
11429 qash=2
11430 athreshold(1)=0.000871
11431 aweight(1)=0.222222
11432 athreshold(2)=4.16894e-05
11433 aweight(2)=0.777778
11434 endif
11435 if(zato.eq.10)then
11436 qash=2
11437 athreshold(1)=0.001103
11438 aweight(1)=0.2
11439 athreshold(2)=5.44515e-05
11440 aweight(2)=0.8
11441 endif
11442 if(zato.eq.11)then
11443 qash=3
11444 athreshold(1)=0.001361
11445 aweight(1)=0.181818
11446 athreshold(2)=8.50804e-05
11447 aweight(2)=0.727273
11448 athreshold(3)=1e-05
11449 aweight(3)=0.090909
11450 endif
11451 if(zato.eq.12)then
11452 qash=3
11453 athreshold(1)=0.001647
11454 aweight(1)=0.166667
11455 athreshold(2)=0.000123
11456 aweight(2)=0.666667
11457 athreshold(3)=1e-05
11458 aweight(3)=0.166667
11459 endif
11460 if(zato.eq.13)then
11461 qash=3
11462 athreshold(1)=0.00196
11463 aweight(1)=0.153846
11464 athreshold(2)=0.000167
11465 aweight(2)=0.615385
11466 athreshold(3)=1e-05
11467 aweight(3)=0.230769
11468 endif
11469 if(zato.eq.14)then
11470 qash=3
11471 athreshold(1)=0.002301
11472 aweight(1)=0.142857
11473 athreshold(2)=0.000218
11474 aweight(2)=0.571429
11475 athreshold(3)=1e-05
11476 aweight(3)=0.285714
11477 endif
11478 if(zato.eq.15)then
11479 qash=3
11480 athreshold(1)=0.002668
11481 aweight(1)=0.133333
11482 athreshold(2)=0.000276
11483 aweight(2)=0.533333
11484 athreshold(3)=1e-05
11485 aweight(3)=0.333333
11486 endif
11487 if(zato.eq.16)then
11488 qash=3
11489 athreshold(1)=0.003063
11490 aweight(1)=0.125
11491 athreshold(2)=0.00034
11492 aweight(2)=0.5
11493 athreshold(3)=1.36129e-05
11494 aweight(3)=0.375
11495 endif
11496 if(zato.eq.17)then
11497 qash=3
11498 athreshold(1)=0.003485
11499 aweight(1)=0.117647
11500 athreshold(2)=0.000412
11501 aweight(2)=0.470588
11502 athreshold(3)=1.85286e-05
11503 aweight(3)=0.411765
11504 endif
11505 if(zato.eq.18)then
11506 qash=3
11507 athreshold(1)=0.003934
11508 aweight(1)=0.111111
11509 athreshold(2)=0.00049
11510 aweight(2)=0.444444
11511 athreshold(3)=2.42007e-05
11512 aweight(3)=0.444444
11513 endif
11514 if(zato.eq.19)then
11515 qash=4
11516 athreshold(1)=0.004411
11517 aweight(1)=0.105263
11518 athreshold(2)=0.000575
11519 aweight(2)=0.421053
11520 athreshold(3)=3.78135e-05
11521 aweight(3)=0.421053
11522 athreshold(4)=1e-05
11523 aweight(4)=0.052632
11524 endif
11525 if(zato.eq.20)then
11526 qash=4
11527 athreshold(1)=0.004914
11528 aweight(1)=0.1
11529 athreshold(2)=0.000667
11530 aweight(2)=0.4
11531 athreshold(3)=5.44515e-05
11532 aweight(3)=0.4
11533 athreshold(4)=1e-05
11534 aweight(4)=0.1
11535 endif
11536 if(zato.eq.21)then
11537 qash=4
11538 athreshold(1)=0.005445
11539 aweight(1)=0.095238
11540 athreshold(2)=0.000766
11541 aweight(2)=0.380952
11542 athreshold(3)=7.41145e-05
11543 aweight(3)=0.380952
11544 athreshold(4)=1e-05
11545 aweight(4)=0.142857
11546 endif
11547 if(zato.eq.22)then
11548 qash=4
11549 athreshold(1)=0.006003
11550 aweight(1)=0.090909
11551 athreshold(2)=0.000871
11552 aweight(2)=0.363636
11553 athreshold(3)=9.68026e-05
11554 aweight(3)=0.363636
11555 athreshold(4)=1e-05
11556 aweight(4)=0.181818
11557 endif
11558 if(zato.eq.23)then
11559 qash=4
11560 athreshold(1)=0.006589
11561 aweight(1)=0.086957
11562 athreshold(2)=0.000984
11563 aweight(2)=0.347826
11564 athreshold(3)=0.000123
11565 aweight(3)=0.347826
11566 athreshold(4)=1e-05
11567 aweight(4)=0.217391
11568 endif
11569 if(zato.eq.24)then
11570 qash=4
11571 athreshold(1)=0.007201
11572 aweight(1)=0.083333
11573 athreshold(2)=0.001103
11574 aweight(2)=0.333333
11575 athreshold(3)=0.000151
11576 aweight(3)=0.333333
11577 athreshold(4)=1e-05
11578 aweight(4)=0.25
11579 endif
11580 if(zato.eq.25)then
11581 qash=4
11582 athreshold(1)=0.007841
11583 aweight(1)=0.08
11584 athreshold(2)=0.001229
11585 aweight(2)=0.32
11586 athreshold(3)=0.000183
11587 aweight(3)=0.32
11588 athreshold(4)=1.04224e-05
11589 aweight(4)=0.28
11590 endif
11591 if(zato.eq.26)then
11592 qash=4
11593 athreshold(1)=0.008508
11594 aweight(1)=0.076923
11595 athreshold(2)=0.001361
11596 aweight(2)=0.307692
11597 athreshold(3)=0.000218
11598 aweight(3)=0.307692
11599 athreshold(4)=1.36129e-05
11600 aweight(4)=0.307692
11601 endif
11602 if(zato.eq.27)then
11603 qash=4
11604 athreshold(1)=0.009202
11605 aweight(1)=0.074074
11606 athreshold(2)=0.001501
11607 aweight(2)=0.296296
11608 athreshold(3)=0.000256
11609 aweight(3)=0.296296
11610 athreshold(4)=1.72288e-05
11611 aweight(4)=0.333333
11612 endif
11613 if(zato.eq.28)then
11614 qash=4
11615 athreshold(1)=0.009924
11616 aweight(1)=0.071429
11617 athreshold(2)=0.001647
11618 aweight(2)=0.285714
11619 athreshold(3)=0.000296
11620 aweight(3)=0.285714
11621 athreshold(4)=2.12701e-05
11622 aweight(4)=0.357143
11623 endif
11624 if(zato.eq.29)then
11625 qash=4
11626 athreshold(1)=0.010672
11627 aweight(1)=0.068966
11628 athreshold(2)=0.0018
11629 aweight(2)=0.275862
11630 athreshold(3)=0.00034
11631 aweight(3)=0.275862
11632 athreshold(4)=2.57368e-05
11633 aweight(4)=0.37931
11634 endif
11635 if(zato.eq.30)then
11636 qash=4
11637 athreshold(1)=0.011448
11638 aweight(1)=0.066667
11639 athreshold(2)=0.00196
11640 aweight(2)=0.266667
11641 athreshold(3)=0.000387
11642 aweight(3)=0.266667
11643 athreshold(4)=3.0629e-05
11644 aweight(4)=0.4
11645 endif
11646 if(zato.eq.31)then
11647 qash=4
11648 athreshold(1)=0.012252
11649 aweight(1)=0.064516
11650 athreshold(2)=0.002127
11651 aweight(2)=0.258065
11652 athreshold(3)=0.000437
11653 aweight(3)=0.258065
11654 athreshold(4)=3.59465e-05
11655 aweight(4)=0.419355
11656 endif
11657 if(zato.eq.32)then
11658 qash=4
11659 athreshold(1)=0.013082
11660 aweight(1)=0.0625
11661 athreshold(2)=0.002301
11662 aweight(2)=0.25
11663 athreshold(3)=0.00049
11664 aweight(3)=0.25
11665 athreshold(4)=4.16894e-05
11666 aweight(4)=0.4375
11667 endif
11668 if(zato.eq.33)then
11669 qash=4
11670 athreshold(1)=0.01394
11671 aweight(1)=0.060606
11672 athreshold(2)=0.002481
11673 aweight(2)=0.242424
11674 athreshold(3)=0.000546
11675 aweight(3)=0.242424
11676 athreshold(4)=4.78577e-05
11677 aweight(4)=0.454545
11678 endif
11679 if(zato.eq.34)then
11680 qash=4
11681 athreshold(1)=0.014824
11682 aweight(1)=0.058824
11683 athreshold(2)=0.002668
11684 aweight(2)=0.235294
11685 athreshold(3)=0.000605
11686 aweight(3)=0.235294
11687 athreshold(4)=5.44515e-05
11688 aweight(4)=0.470588
11689 endif
11690 if(zato.eq.35)then
11691 qash=4
11692 athreshold(1)=0.015736
11693 aweight(1)=0.057143
11694 athreshold(2)=0.002862
11695 aweight(2)=0.228571
11696 athreshold(3)=0.000667
11697 aweight(3)=0.228571
11698 athreshold(4)=6.14706e-05
11699 aweight(4)=0.485714
11700 endif
11701 if(zato.eq.36)then
11702 qash=4
11703 athreshold(1)=0.016676
11704 aweight(1)=0.055556
11705 athreshold(2)=0.003063
11706 aweight(2)=0.222222
11707 athreshold(3)=0.000732
11708 aweight(3)=0.222222
11709 athreshold(4)=6.89152e-05
11710 aweight(4)=0.5
11711 endif
11712 if(zato.eq.37)then
11713 qash=5
11714 athreshold(1)=0.017642
11715 aweight(1)=0.054054
11716 athreshold(2)=0.00327
11717 aweight(2)=0.216216
11718 athreshold(3)=0.0008
11719 aweight(3)=0.216216
11720 athreshold(4)=8.50804e-05
11721 aweight(4)=0.486486
11722 athreshold(5)=1e-05
11723 aweight(5)=0.027027
11724 endif
11725 if(zato.eq.38)then
11726 qash=5
11727 athreshold(1)=0.018636
11728 aweight(1)=0.052632
11729 athreshold(2)=0.003485
11730 aweight(2)=0.210526
11731 athreshold(3)=0.000871
11732 aweight(3)=0.210526
11733 athreshold(4)=0.000103
11734 aweight(4)=0.473684
11735 athreshold(5)=1e-05
11736 aweight(5)=0.052632
11737 endif
11738 if(zato.eq.39)then
11739 qash=5
11740 athreshold(1)=0.019657
11741 aweight(1)=0.051282
11742 athreshold(2)=0.003706
11743 aweight(2)=0.205128
11744 athreshold(3)=0.000945
11745 aweight(3)=0.205128
11746 athreshold(4)=0.000123
11747 aweight(4)=0.461538
11748 athreshold(5)=1e-05
11749 aweight(5)=0.076923
11750 endif
11751 if(zato.eq.40)then
11752 qash=5
11753 athreshold(1)=0.020705
11754 aweight(1)=0.05
11755 athreshold(2)=0.003934
11756 aweight(2)=0.2
11757 athreshold(3)=0.001022
11758 aweight(3)=0.2
11759 athreshold(4)=0.000144
11760 aweight(4)=0.45
11761 athreshold(5)=1e-05
11762 aweight(5)=0.1
11763 endif
11764 if(zato.eq.41)then
11765 qash=5
11766 athreshold(1)=0.021781
11767 aweight(1)=0.04878
11768 athreshold(2)=0.004169
11769 aweight(2)=0.195122
11770 athreshold(3)=0.001103
11771 aweight(3)=0.195122
11772 athreshold(4)=0.000167
11773 aweight(4)=0.439024
11774 athreshold(5)=1e-05
11775 aweight(5)=0.121951
11776 endif
11777 if(zato.eq.42)then
11778 qash=5
11779 athreshold(1)=0.022883
11780 aweight(1)=0.047619
11781 athreshold(2)=0.004411
11782 aweight(2)=0.190476
11783 athreshold(3)=0.001186
11784 aweight(3)=0.190476
11785 athreshold(4)=0.000191
11786 aweight(4)=0.428571
11787 athreshold(5)=1e-05
11788 aweight(5)=0.142857
11789 endif
11790 if(zato.eq.43)then
11791 qash=5
11792 athreshold(1)=0.024013
11793 aweight(1)=0.046512
11794 athreshold(2)=0.004659
11795 aweight(2)=0.186047
11796 athreshold(3)=0.001272
11797 aweight(3)=0.186047
11798 athreshold(4)=0.000218
11799 aweight(4)=0.418605
11800 athreshold(5)=1e-05
11801 aweight(5)=0.162791
11802 endif
11803 if(zato.eq.44)then
11804 qash=5
11805 athreshold(1)=0.02517
11806 aweight(1)=0.045455
11807 athreshold(2)=0.004914
11808 aweight(2)=0.181818
11809 athreshold(3)=0.001361
11810 aweight(3)=0.181818
11811 athreshold(4)=0.000246
11812 aweight(4)=0.409091
11813 athreshold(5)=1e-05
11814 aweight(5)=0.181818
11815 endif
11816 if(zato.eq.45)then
11817 qash=5
11818 athreshold(1)=0.026355
11819 aweight(1)=0.044444
11820 athreshold(2)=0.005176
11821 aweight(2)=0.177778
11822 athreshold(3)=0.001454
11823 aweight(3)=0.177778
11824 athreshold(4)=0.000276
11825 aweight(4)=0.4
11826 athreshold(5)=1.10264e-05
11827 aweight(5)=0.2
11828 endif
11829 if(zato.eq.46)then
11830 qash=5
11831 athreshold(1)=0.027566
11832 aweight(1)=0.043478
11833 athreshold(2)=0.005445
11834 aweight(2)=0.173913
11835 athreshold(3)=0.001549
11836 aweight(3)=0.173913
11837 athreshold(4)=0.000307
11838 aweight(4)=0.391304
11839 athreshold(5)=1.36129e-05
11840 aweight(5)=0.217391
11841 endif
11842 if(zato.eq.47)then
11843 qash=5
11844 athreshold(1)=0.028805
11845 aweight(1)=0.042553
11846 athreshold(2)=0.005721
11847 aweight(2)=0.170213
11848 athreshold(3)=0.001647
11849 aweight(3)=0.170213
11850 athreshold(4)=0.00034
11851 aweight(4)=0.382979
11852 athreshold(5)=1.64716e-05
11853 aweight(5)=0.234043
11854 endif
11855 if(zato.eq.48)then
11856 qash=5
11857 athreshold(1)=0.030071
11858 aweight(1)=0.041667
11859 athreshold(2)=0.006003
11860 aweight(2)=0.166667
11861 athreshold(3)=0.001748
11862 aweight(3)=0.166667
11863 athreshold(4)=0.000375
11864 aweight(4)=0.375
11865 athreshold(5)=1.96025e-05
11866 aweight(5)=0.25
11867 endif
11868 if(zato.eq.49)then
11869 qash=5
11870 athreshold(1)=0.031364
11871 aweight(1)=0.040816
11872 athreshold(2)=0.006293
11873 aweight(2)=0.163265
11874 athreshold(3)=0.001853
11875 aweight(3)=0.163265
11876 athreshold(4)=0.000412
11877 aweight(4)=0.367347
11878 athreshold(5)=2.30058e-05
11879 aweight(5)=0.265306
11880 endif
11881 if(zato.eq.50)then
11882 qash=5
11883 athreshold(1)=0.032685
11884 aweight(1)=0.04
11885 athreshold(2)=0.006589
11886 aweight(2)=0.16
11887 athreshold(3)=0.00196
11888 aweight(3)=0.16
11889 athreshold(4)=0.00045
11890 aweight(4)=0.36
11891 athreshold(5)=2.66812e-05
11892 aweight(5)=0.28
11893 endif
11894 if(zato.eq.51)then
11895 qash=5
11896 athreshold(1)=0.034032
11897 aweight(1)=0.039216
11898 athreshold(2)=0.006892
11899 aweight(2)=0.156863
11900 athreshold(3)=0.002071
11901 aweight(3)=0.156863
11902 athreshold(4)=0.00049
11903 aweight(4)=0.352941
11904 athreshold(5)=3.0629e-05
11905 aweight(5)=0.294118
11906 endif
11907 if(zato.eq.52)then
11908 qash=5
11909 athreshold(1)=0.035407
11910 aweight(1)=0.038462
11911 athreshold(2)=0.007201
11912 aweight(2)=0.153846
11913 athreshold(3)=0.002184
11914 aweight(3)=0.153846
11915 athreshold(4)=0.000532
11916 aweight(4)=0.346154
11917 athreshold(5)=3.48489e-05
11918 aweight(5)=0.307692
11919 endif
11920 if(zato.eq.53)then
11921 qash=5
11922 athreshold(1)=0.036809
11923 aweight(1)=0.037736
11924 athreshold(2)=0.007518
11925 aweight(2)=0.150943
11926 athreshold(3)=0.002301
11927 aweight(3)=0.150943
11928 athreshold(4)=0.000575
11929 aweight(4)=0.339623
11930 athreshold(5)=3.93412e-05
11931 aweight(5)=0.320755
11932 endif
11933 if(zato.eq.54)then
11934 qash=5
11935 athreshold(1)=0.038239
11936 aweight(1)=0.037037
11937 athreshold(2)=0.007841
11938 aweight(2)=0.148148
11939 athreshold(3)=0.00242
11940 aweight(3)=0.148148
11941 athreshold(4)=0.00062
11942 aweight(4)=0.333333
11943 athreshold(5)=4.41057e-05
11944 aweight(5)=0.333333
11945 endif
11946 if(zato.eq.55)then
11947 qash=5
11948 athreshold(1)=0.039695
11949 aweight(1)=0.036364
11950 athreshold(2)=0.008171
11951 aweight(2)=0.145455
11952 athreshold(3)=0.002543
11953 aweight(3)=0.145455
11954 athreshold(4)=0.000667
11955 aweight(4)=0.327273
11956 athreshold(5)=4.91425e-05
11957 aweight(5)=0.345455
11958 endif
11959 if(zato.eq.56)then
11960 qash=5
11961 athreshold(1)=0.041179
11962 aweight(1)=0.035714
11963 athreshold(2)=0.008508
11964 aweight(2)=0.142857
11965 athreshold(3)=0.002668
11966 aweight(3)=0.142857
11967 athreshold(4)=0.000716
11968 aweight(4)=0.321429
11969 athreshold(5)=5.44515e-05
11970 aweight(5)=0.357143
11971 endif
11972 if(zato.eq.57)then
11973 qash=5
11974 athreshold(1)=0.04269
11975 aweight(1)=0.035088
11976 athreshold(2)=0.008852
11977 aweight(2)=0.140351
11978 athreshold(3)=0.002797
11979 aweight(3)=0.140351
11980 athreshold(4)=0.000766
11981 aweight(4)=0.315789
11982 athreshold(5)=6.00328e-05
11983 aweight(5)=0.368421
11984 endif
11985 if(zato.eq.58)then
11986 qash=5
11987 athreshold(1)=0.044228
11988 aweight(1)=0.034483
11989 athreshold(2)=0.009202
11990 aweight(2)=0.137931
11991 athreshold(3)=0.002928
11992 aweight(3)=0.137931
11993 athreshold(4)=0.000818
11994 aweight(4)=0.310345
11995 athreshold(5)=6.58863e-05
11996 aweight(5)=0.37931
11997 endif
11998 if(zato.eq.59)then
11999 qash=6
12000 athreshold(1)=0.045794
12001 aweight(1)=0.033898
12002 athreshold(2)=0.00956
12003 aweight(2)=0.135593
12004 athreshold(3)=0.003063
12005 aweight(3)=0.135593
12006 athreshold(4)=0.000871
12007 aweight(4)=0.305085
12008 athreshold(5)=7.84101e-05
12009 aweight(5)=0.372881
12010 athreshold(6)=1e-05
12011 aweight(6)=0.016949
12012 endif
12013 if(zato.eq.60)then
12014 qash=6
12015 athreshold(1)=0.047386
12016 aweight(1)=0.033333
12017 athreshold(2)=0.009924
12018 aweight(2)=0.133333
12019 athreshold(3)=0.003201
12020 aweight(3)=0.133333
12021 athreshold(4)=0.000927
12022 aweight(4)=0.3
12023 athreshold(5)=9.2023e-05
12024 aweight(5)=0.366667
12025 athreshold(6)=1e-05
12026 aweight(6)=0.033333
12027 endif
12028 if(zato.eq.61)then
12029 qash=6
12030 athreshold(1)=0.049006
12031 aweight(1)=0.032787
12032 athreshold(2)=0.010295
12033 aweight(2)=0.131148
12034 athreshold(3)=0.003341
12035 aweight(3)=0.131148
12036 athreshold(4)=0.000984
12037 aweight(4)=0.295082
12038 athreshold(5)=0.000107
12039 aweight(5)=0.360656
12040 athreshold(6)=1e-05
12041 aweight(6)=0.04918
12042 endif
12043 if(zato.eq.62)then
12044 qash=6
12045 athreshold(1)=0.050653
12046 aweight(1)=0.032258
12047 athreshold(2)=0.010672
12048 aweight(2)=0.129032
12049 athreshold(3)=0.003485
12050 aweight(3)=0.129032
12051 athreshold(4)=0.001042
12052 aweight(4)=0.290323
12053 athreshold(5)=0.000123
12054 aweight(5)=0.354839
12055 athreshold(6)=1e-05
12056 aweight(6)=0.064516
12057 endif
12058 if(zato.eq.63)then
12059 qash=6
12060 athreshold(1)=0.052328
12061 aweight(1)=0.031746
12062 athreshold(2)=0.011057
12063 aweight(2)=0.126984
12064 athreshold(3)=0.003632
12065 aweight(3)=0.126984
12066 athreshold(4)=0.001103
12067 aweight(4)=0.285714
12068 athreshold(5)=0.000139
12069 aweight(5)=0.349206
12070 athreshold(6)=1e-05
12071 aweight(6)=0.079365
12072 endif
12073 if(zato.eq.64)then
12074 qash=6
12075 athreshold(1)=0.054029
12076 aweight(1)=0.03125
12077 athreshold(2)=0.011448
12078 aweight(2)=0.125
12079 athreshold(3)=0.003781
12080 aweight(3)=0.125
12081 athreshold(4)=0.001165
12082 aweight(4)=0.28125
12083 athreshold(5)=0.000157
12084 aweight(5)=0.34375
12085 athreshold(6)=1e-05
12086 aweight(6)=0.09375
12087 endif
12088 if(zato.eq.65)then
12089 qash=6
12090 athreshold(1)=0.055758
12091 aweight(1)=0.030769
12092 athreshold(2)=0.011847
12093 aweight(2)=0.123077
12094 athreshold(3)=0.003934
12095 aweight(3)=0.123077
12096 athreshold(4)=0.001229
12097 aweight(4)=0.276923
12098 athreshold(5)=0.000176
12099 aweight(5)=0.338462
12100 athreshold(6)=1e-05
12101 aweight(6)=0.107692
12102 endif
12103 if(zato.eq.66)then
12104 qash=6
12105 athreshold(1)=0.057514
12106 aweight(1)=0.030303
12107 athreshold(2)=0.012252
12108 aweight(2)=0.121212
12109 athreshold(3)=0.00409
12110 aweight(3)=0.121212
12111 athreshold(4)=0.001294
12112 aweight(4)=0.272727
12113 athreshold(5)=0.000197
12114 aweight(5)=0.333333
12115 athreshold(6)=1e-05
12116 aweight(6)=0.121212
12117 endif
12118 if(zato.eq.67)then
12119 qash=6
12120 athreshold(1)=0.059298
12121 aweight(1)=0.029851
12122 athreshold(2)=0.012663
12123 aweight(2)=0.119403
12124 athreshold(3)=0.004249
12125 aweight(3)=0.119403
12126 athreshold(4)=0.001361
12127 aweight(4)=0.268657
12128 athreshold(5)=0.000218
12129 aweight(5)=0.328358
12130 athreshold(6)=1e-05
12131 aweight(6)=0.134328
12132 endif
12133 if(zato.eq.68)then
12134 qash=6
12135 athreshold(1)=0.061108
12136 aweight(1)=0.029412
12137 athreshold(2)=0.013082
12138 aweight(2)=0.117647
12139 athreshold(3)=0.004411
12140 aweight(3)=0.117647
12141 athreshold(4)=0.00143
12142 aweight(4)=0.264706
12143 athreshold(5)=0.00024
12144 aweight(5)=0.323529
12145 athreshold(6)=1e-05
12146 aweight(6)=0.147059
12147 endif
12148 if(zato.eq.69)then
12149 qash=6
12150 athreshold(1)=0.062946
12151 aweight(1)=0.028986
12152 athreshold(2)=0.013507
12153 aweight(2)=0.115942
12154 athreshold(3)=0.004575
12155 aweight(3)=0.115942
12156 athreshold(4)=0.001501
12157 aweight(4)=0.26087
12158 athreshold(5)=0.000264
12159 aweight(5)=0.318841
12160 athreshold(6)=1.14386e-05
12161 aweight(6)=0.15942
12162 endif
12163 if(zato.eq.70)then
12164 qash=6
12165 athreshold(1)=0.064811
12166 aweight(1)=0.028571
12167 athreshold(2)=0.01394
12168 aweight(2)=0.114286
12169 athreshold(3)=0.004743
12170 aweight(3)=0.114286
12171 athreshold(4)=0.001573
12172 aweight(4)=0.257143
12173 athreshold(5)=0.000288
12174 aweight(5)=0.314286
12175 athreshold(6)=1.36129e-05
12176 aweight(6)=0.171429
12177 endif
12178 if(zato.eq.71)then
12179 qash=6
12180 athreshold(1)=0.066703
12181 aweight(1)=0.028169
12182 athreshold(2)=0.014379
12183 aweight(2)=0.112676
12184 athreshold(3)=0.004914
12185 aweight(3)=0.112676
12186 athreshold(4)=0.001647
12187 aweight(4)=0.253521
12188 athreshold(5)=0.000314
12189 aweight(5)=0.309859
12190 athreshold(6)=1.59762e-05
12191 aweight(6)=0.183099
12192 endif
12193 if(zato.eq.72)then
12194 qash=6
12195 athreshold(1)=0.068622
12196 aweight(1)=0.027778
12197 athreshold(2)=0.014824
12198 aweight(2)=0.111111
12199 athreshold(3)=0.005088
12200 aweight(3)=0.111111
12201 athreshold(4)=0.001723
12202 aweight(4)=0.25
12203 athreshold(5)=0.00034
12204 aweight(5)=0.305556
12205 athreshold(6)=1.85286e-05
12206 aweight(6)=0.194444
12207 endif
12208 if(zato.eq.73)then
12209 qash=6
12210 athreshold(1)=0.070569
12211 aweight(1)=0.027397
12212 athreshold(2)=0.015277
12213 aweight(2)=0.109589
12214 athreshold(3)=0.005265
12215 aweight(3)=0.109589
12216 athreshold(4)=0.0018
12217 aweight(4)=0.246575
12218 athreshold(5)=0.000368
12219 aweight(5)=0.30137
12220 athreshold(6)=2.12701e-05
12221 aweight(6)=0.205479
12222 endif
12223 if(zato.eq.74)then
12224 qash=6
12225 athreshold(1)=0.072543
12226 aweight(1)=0.027027
12227 athreshold(2)=0.015736
12228 aweight(2)=0.108108
12229 athreshold(3)=0.005445
12230 aweight(3)=0.108108
12231 athreshold(4)=0.001879
12232 aweight(4)=0.243243
12233 athreshold(5)=0.000397
12234 aweight(5)=0.297297
12235 athreshold(6)=2.42007e-05
12236 aweight(6)=0.216216
12237 endif
12238 if(zato.eq.75)then
12239 qash=6
12240 athreshold(1)=0.074544
12241 aweight(1)=0.026667
12242 athreshold(2)=0.016203
12243 aweight(2)=0.106667
12244 athreshold(3)=0.005628
12245 aweight(3)=0.106667
12246 athreshold(4)=0.00196
12247 aweight(4)=0.24
12248 athreshold(5)=0.000427
12249 aweight(5)=0.293333
12250 athreshold(6)=2.73203e-05
12251 aweight(6)=0.226667
12252 endif
12253 if(zato.eq.76)then
12254 qash=6
12255 athreshold(1)=0.076572
12256 aweight(1)=0.026316
12257 athreshold(2)=0.016676
12258 aweight(2)=0.105263
12259 athreshold(3)=0.005814
12260 aweight(3)=0.105263
12261 athreshold(4)=0.002043
12262 aweight(4)=0.236842
12263 athreshold(5)=0.000458
12264 aweight(5)=0.289474
12265 athreshold(6)=3.0629e-05
12266 aweight(6)=0.236842
12267 endif
12268 if(zato.eq.77)then
12269 qash=6
12270 athreshold(1)=0.078628
12271 aweight(1)=0.025974
12272 athreshold(2)=0.017156
12273 aweight(2)=0.103896
12274 athreshold(3)=0.006003
12275 aweight(3)=0.103896
12276 athreshold(4)=0.002127
12277 aweight(4)=0.233766
12278 athreshold(5)=0.00049
12279 aweight(5)=0.285714
12280 athreshold(6)=3.41267e-05
12281 aweight(6)=0.246753
12282 endif
12283 if(zato.eq.78)then
12284 qash=6
12285 athreshold(1)=0.080711
12286 aweight(1)=0.025641
12287 athreshold(2)=0.017642
12288 aweight(2)=0.102564
12289 athreshold(3)=0.006195
12290 aweight(3)=0.102564
12291 athreshold(4)=0.002213
12292 aweight(4)=0.230769
12293 athreshold(5)=0.000523
12294 aweight(5)=0.282051
12295 athreshold(6)=3.78135e-05
12296 aweight(6)=0.25641
12297 endif
12298 if(zato.eq.79)then
12299 qash=6
12300 athreshold(1)=0.082821
12301 aweight(1)=0.025316
12302 athreshold(2)=0.018136
12303 aweight(2)=0.101266
12304 athreshold(3)=0.00639
12305 aweight(3)=0.101266
12306 athreshold(4)=0.002301
12307 aweight(4)=0.227848
12308 athreshold(5)=0.000558
12309 aweight(5)=0.278481
12310 athreshold(6)=4.16894e-05
12311 aweight(6)=0.265823
12312 endif
12313 if(zato.eq.80)then
12314 qash=6
12315 athreshold(1)=0.084958
12316 aweight(1)=0.025
12317 athreshold(2)=0.018636
12318 aweight(2)=0.1
12319 athreshold(3)=0.006589
12320 aweight(3)=0.1
12321 athreshold(4)=0.00239
12322 aweight(4)=0.225
12323 athreshold(5)=0.000593
12324 aweight(5)=0.275
12325 athreshold(6)=4.57544e-05
12326 aweight(6)=0.275
12327 endif
12328 if(zato.eq.81)then
12329 qash=6
12330 athreshold(1)=0.087122
12331 aweight(1)=0.024691
12332 athreshold(2)=0.019143
12333 aweight(2)=0.098765
12334 athreshold(3)=0.00679
12335 aweight(3)=0.098765
12336 athreshold(4)=0.002481
12337 aweight(4)=0.222222
12338 athreshold(5)=0.000629
12339 aweight(5)=0.271605
12340 athreshold(6)=5.00084e-05
12341 aweight(6)=0.283951
12342 endif
12343 if(zato.eq.82)then
12344 qash=6
12345 athreshold(1)=0.089314
12346 aweight(1)=0.02439
12347 athreshold(2)=0.019657
12348 aweight(2)=0.097561
12349 athreshold(3)=0.006994
12350 aweight(3)=0.097561
12351 athreshold(4)=0.002574
12352 aweight(4)=0.219512
12353 athreshold(5)=0.000667
12354 aweight(5)=0.268293
12355 athreshold(6)=5.44515e-05
12356 aweight(6)=0.292683
12357 endif
12358 if(zato.eq.83)then
12359 qash=6
12360 athreshold(1)=0.091533
12361 aweight(1)=0.024096
12362 athreshold(2)=0.020178
12363 aweight(2)=0.096386
12364 athreshold(3)=0.007201
12365 aweight(3)=0.096386
12366 athreshold(4)=0.002668
12367 aweight(4)=0.216867
12368 athreshold(5)=0.000706
12369 aweight(5)=0.26506
12370 athreshold(6)=5.90836e-05
12371 aweight(6)=0.301205
12372 endif
12373 if(zato.eq.84)then
12374 qash=6
12375 athreshold(1)=0.093779
12376 aweight(1)=0.02381
12377 athreshold(2)=0.020705
12378 aweight(2)=0.095238
12379 athreshold(3)=0.007411
12380 aweight(3)=0.095238
12381 athreshold(4)=0.002764
12382 aweight(4)=0.214286
12383 athreshold(5)=0.000745
12384 aweight(5)=0.261905
12385 athreshold(6)=6.39049e-05
12386 aweight(6)=0.309524
12387 endif
12388 if(zato.eq.85)then
12389 qash=6
12390 athreshold(1)=0.096052
12391 aweight(1)=0.023529
12392 athreshold(2)=0.021239
12393 aweight(2)=0.094118
12394 athreshold(3)=0.007625
12395 aweight(3)=0.094118
12396 athreshold(4)=0.002862
12397 aweight(4)=0.211765
12398 athreshold(5)=0.000786
12399 aweight(5)=0.258824
12400 athreshold(6)=6.89152e-05
12401 aweight(6)=0.317647
12402 endif
12403 if(zato.eq.86)then
12404 qash=6
12405 athreshold(1)=0.098353
12406 aweight(1)=0.023256
12407 athreshold(2)=0.021781
12408 aweight(2)=0.093023
12409 athreshold(3)=0.007841
12410 aweight(3)=0.093023
12411 athreshold(4)=0.002962
12412 aweight(4)=0.209302
12413 athreshold(5)=0.000828
12414 aweight(5)=0.255814
12415 athreshold(6)=7.41145e-05
12416 aweight(6)=0.325581
12417 endif
12418 if(zato.eq.87)then
12419 qash=6
12420 athreshold(1)=0.100681
12421 aweight(1)=0.022989
12422 athreshold(2)=0.022329
12423 aweight(2)=0.091954
12424 athreshold(3)=0.00806
12425 aweight(3)=0.091954
12426 athreshold(4)=0.003063
12427 aweight(4)=0.206897
12428 athreshold(5)=0.000871
12429 aweight(5)=0.252874
12430 athreshold(6)=7.9503e-05
12431 aweight(6)=0.333333
12432 endif
12433 if(zato.eq.88)then
12434 qash=6
12435 athreshold(1)=0.103036
12436 aweight(1)=0.022727
12437 athreshold(2)=0.022883
12438 aweight(2)=0.090909
12439 athreshold(3)=0.008283
12440 aweight(3)=0.090909
12441 athreshold(4)=0.003166
12442 aweight(4)=0.204545
12443 athreshold(5)=0.000915
12444 aweight(5)=0.25
12445 athreshold(6)=8.50804e-05
12446 aweight(6)=0.340909
12447 endif
12448 if(zato.eq.89)then
12449 qash=6
12450 athreshold(1)=0.105418
12451 aweight(1)=0.022472
12452 athreshold(2)=0.023445
12453 aweight(2)=0.089888
12454 athreshold(3)=0.008508
12455 aweight(3)=0.089888
12456 athreshold(4)=0.00327
12457 aweight(4)=0.202247
12458 athreshold(5)=0.000961
12459 aweight(5)=0.247191
12460 athreshold(6)=9.0847e-05
12461 aweight(6)=0.348315
12462 endif
12463 if(zato.eq.90)then
12464 qash=6
12465 athreshold(1)=0.107828
12466 aweight(1)=0.022222
12467 athreshold(2)=0.024013
12468 aweight(2)=0.088889
12469 athreshold(3)=0.008736
12470 aweight(3)=0.088889
12471 athreshold(4)=0.003377
12472 aweight(4)=0.2
12473 athreshold(5)=0.001007
12474 aweight(5)=0.244444
12475 athreshold(6)=9.68026e-05
12476 aweight(6)=0.355556
12477 endif
12478 if(zato.eq.91)then
12479 qash=7
12480 athreshold(1)=0.110264
12481 aweight(1)=0.021978
12482 athreshold(2)=0.024588
12483 aweight(2)=0.087912
12484 athreshold(3)=0.008968
12485 aweight(3)=0.087912
12486 athreshold(4)=0.003485
12487 aweight(4)=0.197802
12488 athreshold(5)=0.001054
12489 aweight(5)=0.241758
12490 athreshold(6)=0.000109
12491 aweight(6)=0.351648
12492 athreshold(7)=1e-05
12493 aweight(7)=0.010989
12494 endif
12495 if(zato.eq.92)then
12496 qash=7
12497 athreshold(1)=0.112728
12498 aweight(1)=0.021739
12499 athreshold(2)=0.02517
12500 aweight(2)=0.086957
12501 athreshold(3)=0.009202
12502 aweight(3)=0.086957
12503 athreshold(4)=0.003595
12504 aweight(4)=0.195652
12505 athreshold(5)=0.001103
12506 aweight(5)=0.23913
12507 athreshold(6)=0.000123
12508 aweight(6)=0.347826
12509 athreshold(7)=1e-05
12510 aweight(7)=0.021739
12511 endif
12512 if(zato.eq.93)then
12513 qash=7
12514 athreshold(1)=0.115219
12515 aweight(1)=0.021505
12516 athreshold(2)=0.025759
12517 aweight(2)=0.086022
12518 athreshold(3)=0.00944
12519 aweight(3)=0.086022
12520 athreshold(4)=0.003706
12521 aweight(4)=0.193548
12522 athreshold(5)=0.001152
12523 aweight(5)=0.236559
12524 athreshold(6)=0.000137
12525 aweight(6)=0.344086
12526 athreshold(7)=1e-05
12527 aweight(7)=0.032258
12528 endif
12529 if(zato.eq.94)then
12530 qash=7
12531 athreshold(1)=0.117738
12532 aweight(1)=0.021277
12533 athreshold(2)=0.026355
12534 aweight(2)=0.085106
12535 athreshold(3)=0.00968
12536 aweight(3)=0.085106
12537 athreshold(4)=0.003819
12538 aweight(4)=0.191489
12539 athreshold(5)=0.001203
12540 aweight(5)=0.234043
12541 athreshold(6)=0.000151
12542 aweight(6)=0.340426
12543 athreshold(7)=1e-05
12544 aweight(7)=0.042553
12545 endif
12546 if(zato.eq.95)then
12547 qash=7
12548 athreshold(1)=0.120283
12549 aweight(1)=0.021053
12550 athreshold(2)=0.026957
12551 aweight(2)=0.084211
12552 athreshold(3)=0.009924
12553 aweight(3)=0.084211
12554 athreshold(4)=0.003934
12555 aweight(4)=0.189474
12556 athreshold(5)=0.001255
12557 aweight(5)=0.231579
12558 athreshold(6)=0.000167
12559 aweight(6)=0.336842
12560 athreshold(7)=1e-05
12561 aweight(7)=0.052632
12562 endif
12563 if(zato.eq.96)then
12564 qash=7
12565 athreshold(1)=0.122856
12566 aweight(1)=0.020833
12567 athreshold(2)=0.027566
12568 aweight(2)=0.083333
12569 athreshold(3)=0.01017
12570 aweight(3)=0.083333
12571 athreshold(4)=0.004051
12572 aweight(4)=0.1875
12573 athreshold(5)=0.001307
12574 aweight(5)=0.229167
12575 athreshold(6)=0.000183
12576 aweight(6)=0.333333
12577 athreshold(7)=1e-05
12578 aweight(7)=0.0625
12579 endif
12580 if(zato.eq.97)then
12581 qash=7
12582 athreshold(1)=0.125456
12583 aweight(1)=0.020619
12584 athreshold(2)=0.028182
12585 aweight(2)=0.082474
12586 athreshold(3)=0.01042
12587 aweight(3)=0.082474
12588 athreshold(4)=0.004169
12589 aweight(4)=0.185567
12590 athreshold(5)=0.001361
12591 aweight(5)=0.226804
12592 athreshold(6)=0.0002
12593 aweight(6)=0.329897
12594 athreshold(7)=1e-05
12595 aweight(7)=0.072165
12596 endif
12597 if(zato.eq.98)then
12598 qash=7
12599 athreshold(1)=0.128084
12600 aweight(1)=0.020408
12601 athreshold(2)=0.028805
12602 aweight(2)=0.081633
12603 athreshold(3)=0.010672
12604 aweight(3)=0.081633
12605 athreshold(4)=0.004289
12606 aweight(4)=0.183673
12607 athreshold(5)=0.001416
12608 aweight(5)=0.22449
12609 athreshold(6)=0.000218
12610 aweight(6)=0.326531
12611 athreshold(7)=1e-05
12612 aweight(7)=0.081633
12613 endif
12614 if(zato.eq.99)then
12615 qash=7
12616 athreshold(1)=0.130738
12617 aweight(1)=0.020202
12618 athreshold(2)=0.029434
12619 aweight(2)=0.080808
12620 athreshold(3)=0.010928
12621 aweight(3)=0.080808
12622 athreshold(4)=0.004411
12623 aweight(4)=0.181818
12624 athreshold(5)=0.001472
12625 aweight(5)=0.222222
12626 athreshold(6)=0.000236
12627 aweight(6)=0.323232
12628 athreshold(7)=1e-05
12629 aweight(7)=0.090909
12630 endif
12631 if(zato.eq.100)then
12632 qash=7
12633 athreshold(1)=0.13342
12634 aweight(1)=0.02
12635 athreshold(2)=0.030071
12636 aweight(2)=0.08
12637 athreshold(3)=0.011187
12638 aweight(3)=0.08
12639 athreshold(4)=0.004534
12640 aweight(4)=0.18
12641 athreshold(5)=0.00153
12642 aweight(5)=0.22
12643 athreshold(6)=0.000256
12644 aweight(6)=0.32
12645 athreshold(7)=1e-05
12646 aweight(7)=0.1
12647 endif
12648
12649
12650 c end of genetared code
12651
12652
12653 c call prishellfi
12654
12655 end
12656
12657
12658 subroutine prishellfi
12659
12660 implicit none
12661
12662 c include 'GoEvent.inc'
12663 +SEQ,GoEvent.
12664 c include 'shellfi.inc'
12665 +SEQ,shellfi.
12666
12667 integer i,j
12668
12669 if(soo.eq.0)return
12670 write(oo,*)
12671 write(oo,*)' prishellfi:'
12672 write(oo,*)' zato=',zato,' qash=',qash
12673 do i=1,qash
12674 write(oo,*)' number of shell=',i
12675 write(oo,*)' aweight=',aweight(i),' athreshold=',athreshold(i),
12676 + ' qaener=',qaener(i)
12677 write(oo,*)' aener aphot'
12678 do j=1,qaener(i)
12679 write(oo,*)aener(j,i),aphot(j,i)
12680 enddo
12681 enddo
12682
12683 end
12684
12685 +DECK,line.
12686 c Package for integration and interpolation
12687 c of a function, defined by array.
12688
12689
12690 function glin_integ_ar(x,y,q,x1,x2,thresh)
12691 c
12692 c It makes the same work as lin_integ_ar
12693 c but at some conditions it interpolates no the line
12694 c but power function.
12695 c
12696
12697 implicit none
12698 real glin_integ_ar
12699 real x(*),y(*),x1,x2,thresh
12700 integer q
12701
12702 integer nr,nrr,n1,i
12703 real xt1,xt2
12704 real xr1,xr2
12705 real a,b
12706 real k,p
12707 real s
12708 s=0
12709 glin_integ_ar=0.0
12710 if(q.le.0)return
12711 if(x2.lt.x1 .or. x2.lt.x(1) .or. x1.gt.x(q))return
12712
12713 if(x1.lt.x(1))then
12714 xt1=x(1)
12715 else
12716 xt1=x1
12717 endif
12718 do i=2,q
12719 if(x(i).gt.xt1)then
12720 n1=i
12721 goto 10
12722 endif
12723 enddo
12724 10 continue
12725 nr=n1-1
12726 if(x2.gt.x(q))then ! it is not necessary
12727 xt2=x(q)
12728 else
12729 xt2=x2
12730 endif
12731 xr2=xt1
12732 c write(6,*)' x1=',x1,' x2=',x2,' xt1=',xt1,' xt2=',xt2
12733 c write(6,*)' n1=',n1,' n2=',n2,' n1=',n1,' nr=',nr
12734 do nrr=nr,q-1
12735 if(x(nrr).gt.x2)go to 20
12736 xr1=xr2
12737 if(xt2.lt.x(nrr+1))then
12738 xr2=xt2
12739 else
12740 xr2=x(nrr+1)
12741 endif
12742 if(x(nrr).gt.500.0e-6.and.x(nrr).gt.2*thresh.and.
12743 + y(nrr+1).lt.y(nrr).and.y(nrr+1).gt.0.0)then
12744 p=dlog(dble(y(nrr))/y(nrr+1))/
12745 + dlog(dble(x(nrr+1))/x(nrr))
12746 k=y(nrr)*x(nrr)**p
12747 s=s+
12748 + k/(1-p)*(1.0/xr2**(p-1)-1.0/xr1**(p-1))
12749 c write(6,*)' nrr=',nrr,' p=',p,' k=',k,' s=',s
12750 else
12751 a = (y(nrr+1) - y(nrr))/(x(nrr+1) - x(nrr))
12752 b = y(nrr)
12753 s = s+
12754 + 0.5*a*(xr2*xr2 - xr1*xr1) + (b - a*x(nrr))*(xr2 - xr1)
12755 endif
12756 c write(6,*)' nrr=',nrr
12757 c write(6,*)' y(nrr)=',y(nrr),' y(nrr+1)=',y(nrr+1)
12758 c write(6,*)' xr1=',xr1,' xr2=',xr2
12759 c write(6,*)' x(nrr)=',x(nrr),' x(nrr+1)=',x(nrr+1)
12760 c write(6,*)' s=',s
12761 enddo
12762
12763 20 glin_integ_ar=s
12764
12765 end
12766
12767 function lin_integ_ar(x,y,q,x1,x2)
12768
12769 implicit none
12770 real lin_integ_ar
12771 real x(*),y(*),x1,x2
12772 integer q
12773
12774 integer nr,nrr,n1,i
12775 real xt1,xt2
12776 real xr1,xr2
12777 real a,b
12778 real s
12779 s=0
12780 lin_integ_ar=0.0
12781 if(q.le.0)return
12782 if(x2.lt.x1 .or. x2.lt.x(1) .or. x1.gt.x(q))return
12783
12784 if(x1.lt.x(1))then
12785 xt1=x(1)
12786 else
12787 xt1=x1
12788 endif
12789 do i=2,q
12790 if(x(i).gt.xt1)then
12791 n1=i
12792 goto 10
12793 endif
12794 enddo
12795 10 continue
12796 nr=n1-1
12797 if(x2.gt.x(q))then ! it is not necessary
12798 xt2=x(q)
12799 else
12800 xt2=x2
12801 endif
12802 xr2=xt1
12803 c write(6,*)' x1=',x1,' x2=',x2,' xt1=',xt1,' xt2=',xt2
12804 c write(6,*)' n1=',n1,' n2=',n2,' n1=',n1,' nr=',nr
12805 do nrr=nr,q-1
12806 if(x(nrr).gt.x2)go to 20
12807 xr1=xr2
12808 if(xt2.lt.x(nrr+1))then
12809 xr2=xt2
12810 else
12811 xr2=x(nrr+1)
12812 endif
12813 a = (y(nrr+1) - y(nrr))/(x(nrr+1) - x(nrr))
12814 b = y(nrr)
12815 s = s+
12816 + 0.5*a*(xr2*xr2 - xr1*xr1) + (b - a*x(nrr))*(xr2 - xr1)
12817 c write(6,*)' nrr=',nrr
12818 c write(6,*)' y(nrr)=',y(nrr),' y(nrr+1)=',y(nrr+1)
12819 c write(6,*)' xr1=',xr1,' xr2=',xr2
12820 c write(6,*)' x(nrr)=',x(nrr),' x(nrr+1)=',x(nrr+1)
12821 c write(6,*)' s=',s
12822 enddo
12823
12824 20 lin_integ_ar=s
12825
12826 end
12827
12828
12829 function step_integ_ar(x,y,q,x1,x2)
12830 c
12831 c dimension of y must be q
12832 c dimension of x must be q+1
12833 c the last point means the end of last interval.
12834 c
12835 implicit none
12836 real step_integ_ar
12837 real x(*),y(*),x1,x2
12838 integer q
12839
12840 integer nr,nrr,n1,i
12841 real xt1,xt2
12842 real xr1,xr2
12843 c real a,b
12844 real s
12845 s=0
12846 step_integ_ar=0.0
12847 c write(6,*)' step:',q,x1,x2,x(1),x(q+1)
12848 if(q.le.0)return
12849 if(x2.lt.x1 .or. x2.lt.x(1) .or. x1.gt.x(q+1))return
12850
12851 if(x1.lt.x(1))then
12852 xt1=x(1)
12853 else
12854 xt1=x1
12855 endif
12856 do i=2,q+1
12857 if(x(i).gt.xt1)then
12858 n1=i
12859 goto 10
12860 endif
12861 enddo
12862 10 continue
12863 nr=n1-1
12864 if(x2.gt.x(q+1))then ! it is not necessary
12865 xt2=x(q+1)
12866 else
12867 xt2=x2
12868 endif
12869 xr2=xt1
12870
12871
12872 do nrr=nr,q
12873 if(x(nrr).gt.x2)go to 20
12874
12875 xr1=xr2
12876 if(xt2.lt.x(nrr+1))then
12877 xr2=xt2
12878 else
12879 xr2=x(nrr+1)
12880 endif
12881 s = s+ y(nrr)*(xr2-xr1)
12882
12883 c write(6,*)' nrr=',nrr,' xr=',xr1,xr2
12884 c write(6,*)' y(nrr)=',y(nrr),' s=',s
12885
12886 enddo
12887
12888 20 step_integ_ar=s
12889
12890
12891 end
12892
12893 function interp_line_arr(x,y,q,tr,x0)
12894 c
12895 c special code
12896 c If x0<tr => 0
12897 c If tr<x0<x(1) linear interp.
12898 c If x0>x(q) exponential interp., if it go down
12899 c
12900
12901 implicit none
12902
12903 real interp_line_arr
12904 integer q ! quantity of elements
12905 real x(*) ! abscissa
12906 real y(*) ! ordin.
12907 real tr ! low treshold
12908 real x0 ! point
12909
12910 integer n,n1,n2
12911 real p,k
12912 real s
12913
12914 if(x0.lt.tr)then
12915 interp_line_arr=0.0
12916 return
12917 endif
12918
12919 if(x0.gt.x(q))then
12920 if(y(q-1).le.y(q))then
12921 interp_line_arr=0.0
12922 return
12923 endif
12924 p = alog(y(q-1)/y(q)) / alog(x(q-1)/x(q))
12925 k = y(q) / (x(q)**p)
12926 s = k * (x0 ** p)
12927 interp_line_arr = s
12928 return
12929 endif
12930
12931 do n=2,q
12932 if(x0.le.x(n))then
12933 n1=n-1
12934 go to 10
12935 endif
12936 enddo
12937 10 n2=n1+1
12938
12939 k = (y(n2)-y(n1)) / (x(n2)-x(n1))
12940 s = y(n1) + k * ( x0-x(n1))
12941 interp_line_arr = s
12942 c write(6,*)' n1,n2=',n1,n2
12943 c write(6,*)' x=',x(n1),x(n2)
12944 c write(6,*)' y=',y(n1),y(n2)
12945 c write(6,*)' k,s=',k,s
12946 c stop
12947 return
12948
12949 end
12950
12951 function interp_linep_arr(x,y,q,tr,x0)
12952 c
12953 c special code
12954 c If x0<tr => 0
12955 c If tr<x0<x(1) linear interp.
12956 c If x0>x(q) exponential interp., if it go down
12957 c If x(i+1).lt.x(i) then power line
12958 c
12959
12960 implicit none
12961
12962 real interp_linep_arr
12963 integer q ! quantity of elements
12964 real x(*) ! abscissa
12965 real y(*) ! ordin.
12966 real tr ! low treshold
12967 real x0 ! point
12968
12969 integer n,n1,n2
12970 real p,k
12971 real s
12972
12973 if(x0.lt.tr)then
12974 interp_linep_arr=0.0
12975 return
12976 endif
12977
12978 if(x0.gt.x(q))then
12979 * if(y(q-1).le.y(q))then
12980 * interp_linep_arr=0.0
12981 * return
12982 * endif
12983 * p = alog(y(q-1)/y(q)) / alog(x(q-1)/x(q))
12984 p=-3.22
12985 k = y(q) / (x(q)**p)
12986 s = k * (x0 ** p)
12987 interp_linep_arr = s
12988 return
12989 endif
12990
12991 do n=2,q
12992 if(x0.le.x(n))then
12993 n1=n-1
12994 go to 10
12995 endif
12996 enddo
12997 10 n2=n1+1
12998
12999 if(y(n2).ge.y(n1))then
13000 k = (y(n2)-y(n1)) / (x(n2)-x(n1))
13001 s = y(n1) + k * ( x0-x(n1))
13002 else
13003 p = alog(y(n1)/y(n2)) / alog(x(n1)/x(n2))
13004 k = y(n1) / (x(n1)**p)
13005 s = k * (x0 ** p)
13006 endif
13007 interp_linep_arr = s
13008 c write(6,*)' n1,n2=',n1,n2
13009 c write(6,*)' x=',x(n1),x(n2)
13010 c write(6,*)' y=',y(n1),y(n2)
13011 c write(6,*)' p,k,s=',p,k,s
13012 c stop
13013 return
13014
13015 end
13016 +DECK,IniMatte.
13017
13018 subroutine IniMatter(num,Atom,Weight,q,dens,pw,pf)
13019 c
13020 c Initialization of the Matter
13021 c
13022 implicit none
13023
13024 c include 'GoEvent.inc'
13025 +SEQ,GoEvent.
13026 c include 'cconst.inc'
13027 +SEQ,cconst.
13028 c include 'ener.inc'
13029 +SEQ,ener.
13030 c include 'atoms.inc'
13031 +SEQ,atoms.
13032 c include 'matters.inc'
13033 +SEQ,matters.
13034
13035 integer num,Atom(*),q
13036 real Weight(*),dens,pw,pf
13037
13038 integer nat,nsh,nen,i,j
13039 real rms,rm(pQAt)
13040 real sw,ph,ph1
13041 real E,E2,S,EE1,EE2,EP1,EP2
13042
13043
13044 if(num.le.0.or.num.gt.pQMat)then
13045 write(oo,*)' Error in IniMatter: Wrong matter number',num
13046 if(sret_err.eq.0) stop
13047 s_err=1
13048 return
13049 endif
13050 if(QAtMat(num).gt.0)then
13051 write(oo,*)' Error in IniMatter: matter number',num,
13052 + ' is initialized already'
13053 if(sret_err.eq.0) stop
13054 s_err=1
13055 return
13056 endif
13057 if(q.le.0)then
13058 write(oo,*)' Error in IniMatter: empty list of atoms',
13059 + ' for matter number ',num
13060 if(sret_err.eq.0) stop
13061 s_err=1
13062 return
13063 endif
13064 QAtMat(num)=q
13065 sw=0.0
13066 if(q.eq.1)then
13067 Weight(1)=1.0
13068 endif
13069 do nat=1,q
13070
13071 if(Zat(Atom(nat)).le.0)then
13072 write(oo,*)' Error in IniMatter: Atom number',
13073 + nat,' is not initialized'
13074 if(sret_err.eq.0) stop
13075 s_err=1
13076 return
13077 endif
13078 if(Weight(nat).lt.0.0)then
13079 write(oo,*)' Error in IniMatter: Weight is negative'
13080 if(sret_err.eq.0) stop
13081 s_err=1
13082 return
13083 endif
13084
13085 AtMat(nat,num)=Atom(nat)
13086 WeightAtMat(nat,num)=Weight(nat)
13087 sw=sw+Weight(nat)
13088 enddo
13089
13090
13091 do nat=1,q
13092 WeightAtMat(nat,num)=WeightAtMat(nat,num)/sw
13093 enddo
13094 A_Mean(num)=0.0
13095 Z_Mean(num)=0.0
13096 do nat=1,q
13097 A_Mean(num)=A_Mean(num)+Aat(Atom(nat))*WeightAtMat(nat,num)
13098 Z_Mean(num)=Z_Mean(num)+Zat(Atom(nat))*WeightAtMat(nat,num)
13099 enddo
13100
13101 DensMat(num)=dens
13102
13103 DensMatDL(num)=DensMat(num)
13104 DensMatDS(num)=DensMat(num) ! if it is not equal
13105 ! than the multiple scatering of the
13106 ! insident particle will be calculated wrongly
13107 c DensMatDS(num)=0.2*DensMat(num)
13108
13109 Pressure(num)=Cur_Pressure ! It is never used, only for printing
13110
13111 WWW(num)=pw
13112 FFF(num)=pf
13113
13114
13115 do nen=1,qener
13116 ph=0.0
13117 do nat=1,q
13118 ph1=0.0
13119 do nsh=1,QShellAt(Atom(nat))
13120 ph1=ph1+PhotAt(nen,nsh,Atom(nat))
13121 enddo
13122 ph=ph+ph1*WeightAtMat(nat,num)
13123 enddo
13124 PhotMat(nen,num)=ph
13125 enddo
13126
13127 do nen=1,qener ! the same but with ionization potential
13128 ph=0.0
13129 do nat=1,q
13130 ph1=0.0
13131 do nsh=1,QShellAt(Atom(nat))
13132 ph1=ph1+PhotIonAt(nen,nsh,Atom(nat))
13133 enddo
13134 ph=ph+ph1*WeightAtMat(nat,num)
13135 enddo
13136 PhotIonMat(nen,num)=ph
13137 enddo
13138
13139 ElDensMat(num)=Z_Mean(num)/A_Mean(num)*AVOGADRO*DensMat(num)/
13140 + ((5.07**3)*1.0e30)
13141 XElDensMat(num)=ElDensMat(num)*5.07e10
13142 wplaMat(num)=ElDensMat(num)*4.0*PI/(ELMAS*FSCON)
13143
13144 RLenMat(num)=0.0
13145 rms=0.0
13146 do nat=1,QAtMat(num)
13147 rms=rms+Aat(AtMat(nat,num))*WeightAtMat(nat,num)
13148 enddo
13149 do nat=1,QAtMat(num)
13150 rm(nat)=Aat(AtMat(nat,num))*WeightAtMat(nat,num)/rms
13151 enddo
13152 c write(oo,*)' rm(1)=',rm(1)
13153 do nat=1,QAtMat(num)
13154 RLenMat(num)=RLenMat(num)+rm(nat)/RLenAt(AtMat(nat,num))
13155 enddo
13156 RLenMat(num)=1.0/(DensMatDS(num)*RLenMat(num))
13157 c RLenMat(num)=1.0/RLenMat(num)
13158
13159 RuthMat(num)=0.0
13160 do nat=1,QAtMat(num)
13161 RuthMat(num)=RuthMat(num)+
13162 + WeightAtMat(nat,num)*RuthAt(AtMat(nat,num))
13163 enddo
13164 RuthMat(num)=RuthMat(num)*DensMatDS(num)*AVOGADRO/A_Mean(num)
13165
13166
13167 DO nen=1,qener
13168 epsi2(nen,num)=
13169 + (PhotMat(nen,num)/enerc(nen))*ElDensMat(num)/Z_Mean(num)
13170 enddo
13171
13172 min_ioniz_pot(num)=1.0e30
13173 do nat=1,QAtMat(num)
13174 do nsh=1,QShellAt(Atom(nat))
13175 if(min_ioniz_pot(num).gt.ThresholdAt(nsh,Atom(nat)))then
13176 min_ioniz_pot(num)=ThresholdAt(nsh,Atom(nat))
13177 endif
13178 enddo
13179 enddo
13180
13181 do i=1,qener
13182 E=ENERC(I)
13183 E2=E*E
13184 EPSIP(I,num)=-WPLAMat(num)/E2
13185 S=0.0
13186 do j=1,qener
13187
13188 IF(J.NE.I)THEN
13189 S=S+EPSI2(J,num)*ENERC(J)*(ENER(J+1)-ENER(J))/
13190 + (ENERC(J)*ENERC(J)-E2)
13191 ELSE
13192 EE1=(ENER(J)+ENERC(J))/2.0
13193 EE2=(ENER(J+1)+ENERC(J))/2.0
13194 IF(J.GT.1)THEN
13195 EP1=EPSI2(J-1,num)+(EE1-ENERC(J-1))*
13196 + (EPSI2(J,num)-EPSI2(J-1,num))/
13197 + (ENERC(J)-ENERC(J-1))
13198 ELSE
13199 EP1=EPSI2(J,num)+(EE1-ENERC(J))*
13200 + (EPSI2(J+1,num)-EPSI2(J,num))/
13201 + (ENERC(J+1)-ENERC(J))
13202 END IF
13203 IF(J.LT.qener)THEN
13204 EP2=EPSI2(J,num)+(EE2-ENERC(J))*
13205 + (EPSI2(J+1,num)-EPSI2(J,num))/
13206 + (ENERC(J+1)-ENERC(J))
13207 ELSE
13208 EP2=EPSI2(J,num)+(EE2-ENERC(J))*
13209 + (EPSI2(J,num)-EPSI2(J-1,num))/
13210 + (ENERC(J)-ENERC(J-1))
13211 END IF
13212 S=S+EP1*EE1*(ENERC(J)-ENER(J))/
13213 + (EE1*EE1-E2)
13214 S=S+EP2*EE2*(ENER(J+1)-ENERC(J))/
13215 + (EE2*EE2-E2)
13216 END IF
13217 epsi1(i,num)=(2.0/PI)*S
13218 enddo
13219 enddo
13220
13221 end
13222 +DECK,PRIMATT.
13223 subroutine PriMatter(p)
13224
13225
13226 implicit none
13227
13228 integer p ! p = 0,1 short output
13229 ! p >= 2 long output
13230
13231 c include 'GoEvent.inc'
13232 +SEQ,GoEvent.
13233 c include 'ener.inc'
13234 +SEQ,ener.
13235 c include 'atoms.inc'
13236 +SEQ,atoms.
13237 c include 'matters.inc'
13238 +SEQ,matters.
13239
13240 integer nat
13241
13242 integer nmat,nen
13243
13244 if(soo.eq.0)return
13245 write(oo,*)
13246 write(oo,*)' PriMatter:'
13247 do nmat=1,pQMat
13248 if(qAtMat(nmat).gt.0)then
13249 write(oo,*)' matter number ',nmat, ' qAtMat=',qAtMat(nmat)
13250 do nat=1,qAtMat(nmat)
13251 write(oo,*)' number of atom is ',AtMat(nat,nmat),
13252 + ' weight=', WeightAtMat(nat,nmat)
13253 enddo
13254 write(oo,*)' A_Mean=',A_Mean(nmat),' Z_mean=',Z_Mean(nmat)
13255 write(oo,*)' DensMat=',DensMat(nmat),
13256 + ' ElDensMat=',ElDensMat(nmat),
13257 + ' XElDensMat=',XElDensMat(nmat)
13258 write(oo,*)' wplaMat=',wplaMat(nmat)
13259 write(oo,*)' plasm energy(sqrt(wplaMat))=',sqrt(wplaMat(nmat))
13260 write(oo,*)' RLenMat=',RLenMat(nmat)
13261 write(oo,*)' RuthMat=',RuthMat(nmat)
13262 write(oo,*)' min_ioniz_pot=',min_ioniz_pot(nmat)
13263 write(oo,*)' Pressure=',Pressure(nmat)
13264 write(oo,*)' WWW=',WWW(nmat),' FFF=',FFF(nmat)
13265 if(p.ge.2)then
13266 write(oo,*)' enerc PhotMat PhotIonMat epsip ',
13267 + ' epsi1 epsi2'
13268 do nen=1,qener
13269 write(oo,'(6E10.3)')enerc(nen),
13270 + PhotMat(nen,nmat),PhotIonMat(nen,nmat),epsip(nen,nmat),
13271 + epsi1(nen,nmat),epsi2(nen,nmat)
13272 enddo ! nen=1,qener
13273 endif
13274 endif ! if(qAtMat(nmat).gt.0)
13275 enddo ! nmat=1,pQMat
13276
13277 end
13278 +DECK,GRAPHMAT,IF=NEVER.
13279 subroutine GraphMatter(num)
13280 c
13281 c input the data for showing the graphic by PAW
13282 c
13283 implicit none
13284
13285 c include 'GoEvent.inc'
13286 +SEQ,GoEvent.
13287 c include 'cconst.inc'
13288 +SEQ,cconst.
13289 c include 'ener.inc'
13290 +SEQ,ener.
13291 c include 'atoms.inc'
13292 +SEQ,atoms.
13293 c include 'matters.inc'
13294 +SEQ,matters.
13295
13296 integer num
13297 integer k,n
13298 real r
13299 real s
13300 c Calc. coef for going from 10**-18 sm**2 to Mev-2
13301 s=1.e-18 * 5.07e10 * 5.07e10
13302
13303 n=0
13304 open(2,file='matter.grp')
13305 do k=1,qener
13306 if(PhotMat(k,num).gt.0.0)then
13307 c write(2,'(E10.3)')enerc(k)
13308 n=n+1
13309 endif
13310 enddo
13311 do k=1,qener
13312 if(PhotMat(k,num).gt.0.0)then
13313 c r=PhotMat(k,num)*ElDensMat(num)/Z_Mean(num)*5.07E10
13314 c r=1/r
13315 c r=r/DensMat(num)
13316 c write(2,'(2E10.3)')r
13317 c write(2,'(2E10.3)')enerc(k)*1.e6,r
13318 c write(2,'(2E10.3)')enerc(k),alog(r)
13319 write(2,*)enerc(k)*1.0e6, PhotMat(k,num)/s
13320 endif
13321 enddo
13322 close(2)
13323 write(oo,*)' GraphMatter: ',
13324 + 'file matter.grp is writen,n=',n
13325
13326 end
13327 +DECK,gasdens.
13328 function gasdens(A,Weight,q)
13329 c
13330 c Calc. gas density
13331 c
13332 implicit none
13333
13334 c include 'GoEvent.inc'
13335 +SEQ,GoEvent.
13336 c include 'ener.inc'
13337 +SEQ,ener.
13338 c include 'atoms.inc'
13339 +SEQ,atoms.
13340 c include 'matters.inc'
13341 +SEQ,matters.
13342
13343 real gasdens,A(*),Weight(*)
13344 integer q
13345 real powat
13346 real temp
13347 real ridberg
13348 real d,s
13349 integer i
13350 c powat=101325.0
13351 c powat=Cur_Pressure
13352 *** Ensure that an initial value is set (RV 12/2/97)
13353 gasdens=-1
13354 *** End of modification.
13355 if(Cur_Pressure.le.0 .or. Cur_Temper.le.0)then
13356 write(oo,*) ' error in gasdens: negative or',
13357 + ' zero Cur_Pressure or Cur_Temper'
13358 write(oo,*)' Cur_Pressure=',Cur_Pressure
13359 write(oo,*)' Cur_Temper=',Cur_Temper
13360 if(sret_err.eq.0) stop
13361 s_err=1
13362 return
13363 endif
13364 if(q.le.0)then
13365 write(oo,*)' error in gasdens: q<=0'
13366 write(oo,*)' q=',q
13367 if(sret_err.eq.0) stop
13368 s_err=1
13369 return
13370 endif
13371 do i=1,q
13372 if(A(i).le.0 .or. Weight(i).le.0)then
13373 write(oo,*) ' error in gasdens: negative or',
13374 + ' zero A or Weight'
13375 write(oo,*)' i=',i
13376 write(oo,*)' A(i)=',A(i)
13377 write(oo,*)' Weight(i)=',Weight(i)
13378 if(sret_err.eq.0) stop
13379 s_err=1
13380 return
13381 endif
13382 enddo
13383
13384
13385 powat=101325.0/760 * Cur_Pressure
13386 c temp=293
13387 temp=Cur_Temper
13388 ridberg=8.314
13389 d=0
13390 do i=1,q
13391 d=d+Weight(i)
13392 enddo
13393 s=0
13394 do i=1,q
13395 s=s+A(i)*Weight(i)
13396 enddo
13397 s=s*powat/(ridberg*temp*d)
13398 s=s*1.e-3*1.e-3
13399 gasdens=s
13400 return
13401 end
13402 +DECK,IniVolum.
13403 subroutine IniFVolume(up,nmat,sSens,sIon,cwall1,cwide)
13404 c
13405 c Init. first volume
13406 c
13407 implicit none
13408 integer up,nmat,sSens,sIon
13409 c integer sTran
13410 real cwall1,cwide
13411 c include 'volume.inc'
13412 +SEQ,volume.
13413
13414 qvol=0
13415 RLenRAVol=0.0
13416 call IniVolume(up,nmat,sSens,sIon,cwall1,cwall1+cwide,cwide)
13417
13418 end
13419
13420 subroutine IniNVolume(up,nmat,sSens,sIon,cwide)
13421 c
13422 c Init. next (not the first) volume
13423 c
13424 implicit none
13425 integer up,nmat,sSens,sIon
13426 c integer sTran
13427 real cwall1,cwide
13428
13429 c include 'volume.inc'
13430 +SEQ,volume.
13431
13432 cwall1=wall2(qvol)
13433
13434 call IniVolume(up,nmat,sSens,sIon,cwall1,cwall1+cwide,cwide)
13435
13436 end
13437
13438
13439 subroutine IniVolume(up,nmat,sSens,sIoni,cwall1,cwall2,cwide)
13440 c
13441 c Init. any volume
13442 c
13443 implicit none
13444
13445 c include 'GoEvent.inc'
13446 +SEQ,GoEvent.
13447 c include 'volume.inc'
13448 +SEQ,volume.
13449 c include 'ener.inc'
13450 +SEQ,ener.
13451 c include 'atoms.inc'
13452 +SEQ,atoms.
13453 c include 'matters.inc'
13454 +SEQ,matters.
13455
13456 integer up,nmat,sSens,sIoni
13457 c integer sTran
13458 real cwall1,cwall2,cwide
13459
13460
13461 if(qvol.ge.pqvol)then
13462 write(oo,*)' Error in IniVolume: memory is over'
13463 stop
13464 endif
13465 if(qvol.eq.0)then
13466 QSVol=0
13467 QIVol=0
13468 endif
13469 qvol=qvol+1
13470 if(nmat.eq.0.and.sSens.eq.1)then
13471 write(oo,*)' Error in IniVolume: nmat=0 and sSens =1',
13472 + ' simultaniously'
13473 stop
13474 endif
13475 if(sIoni.eq.0.and.sSens.eq.1)then
13476 write(oo,*)' Error in IniVolume: sIoni=0 and sSens =1',
13477 + ' simultaniously'
13478 stop
13479 endif
13480 if(nmat.ne.0)then
13481 if(qAtMat(nmat).eq.0)then
13482 write(oo,*)' Error in IniVolume: matter number',nmat,
13483 + ' is not initialized yet'
13484 stop
13485 endif
13486 endif
13487
13488 upVol(qvol)=up
13489 nMatVol(qvol)=nmat
13490 sSensit(qvol)=sSens
13491 sIonizat(qvol)=sIoni
13492 if(sSens.ne.0)then
13493 QSVol=QSVol+1
13494 if(QSVol.gt.pQSVol)then
13495 write(oo,*)' Error in IniVolume: too much sens. volumes'
13496 stop
13497 endif
13498 numVolSens(QSVol)=qvol
13499 numSensVol(qvol)=QSVol
13500 else
13501 numSensVol(qvol)=0
13502 endif
13503 if(sIoni.ne.0)then
13504 QIVol=QIVol+1
13505 if(QIVol.gt.pQIVol)then
13506 write(oo,*)' Error in IniVolume: too much ioniz. volumes'
13507 stop
13508 endif
13509 numVolIoni(QIVol)=qvol
13510 numIoniVol(qvol)=QIVol
13511 else
13512 numIoniVol(qvol)=0
13513 endif
13514
13515 if(qvol.eq.1)then
13516 wall1(qvol)=cwall1
13517 else
13518 wall1(qvol)=wall2(qvol-1)
13519 endif
13520 wide(qvol)=cwide
13521 if(wide(qvol).le.0.0)then
13522 write(oo,*)' Error in IniVolume: wide is negative or zero'
13523 stop
13524 endif
13525 wall2(qvol)=wall1(qvol)+wide(qvol)
13526
13527 c wall2(qvol)=cwall2
13528 c if(qvol.eq.1)then
13529 c wall1(qvol)=cwall1
13530 c else
13531 c wall1(qvol)=wall2(qvol-1)
13532 c endif
13533 c wide(qvol)=wall2(qvol)-wall1(qvol)
13534 c if(wide(qvol).le.0.0)then
13535 c write(oo,*)' Error in IniVolume: wide is negative or zero'
13536 c stop
13537 c endif
13538
13539 if(nmat.gt.0)then
13540 RLenRVol(qvol)=wide(qvol)/RLenMat(nmat)
13541 RLenRAVol=RLenRAVol+RLenRVol(qvol)
13542 endif
13543
13544 end
13545 +DECK,VOLPATHL.
13546 subroutine VolPathLeng(zcoor,veloc, num, mleng)
13547
13548 c Find path leng in the current mat
13549 c zcoor - z coordinate
13550 c num - number of volume
13551 c veloc - velocity(cosine)
13552
13553 implicit none
13554
13555 c include 'volume.inc'
13556 +SEQ,volume.
13557
13558 real veloc(3)
13559 real*8 zcoor,mleng
13560 real*8 z
13561 integer num
13562
13563 c write(oo,*)' zcoor=',zcoor
13564 c write(oo,*)' veloc=',veloc
13565 c write(oo,*)' num=',num
13566 z=zcoor
13567 if(veloc(3).eq.0.0)then
13568 mleng=1.e30
13569 else if(veloc(3).gt.0.0)then
13570 mleng=(wall2(num)-z)/veloc(3)
13571 else
13572 mleng=(wall1(num)-z)/veloc(3)
13573 endif
13574
13575 end
13576 +DECK,VOLNUMZC.
13577 subroutine VolNumZcoor(zcoor,veloc,num)
13578
13579 c Find number of material for this coor.
13580 c zcoor - z coordinate
13581 c veloc - z velocity
13582 c num - number of volume
13583 c if(num.ne.0) particle go to next lay
13584 c correspodently with its velocity
13585 c if without of vol, returns 0
13586 c if num!=0 at call, go to next mat.
13587
13588 implicit none
13589
13590 c include 'volume.inc'
13591 +SEQ,volume.
13592
13593 real veloc
13594 real*8 zcoor
13595 integer num
13596 integer i
13597
13598 if(num.ne.0)then
13599 if(veloc.gt.0)then
13600 if(num.lt.qvol)then
13601 num=num+1
13602 return
13603 else
13604 num=0
13605 return
13606 endif
13607 else
13608 if(num.gt.1)then
13609 num=num-1
13610 return
13611 else
13612 num=0
13613 return
13614 endif
13615 endif
13616 endif
13617
13618 num=0
13619 if(zcoor.lt.wall1(1))then
13620 return
13621 else
13622 if(zcoor.eq.wall1(1))then
13623 if(veloc.gt.0)then
13624 num=1
13625 else
13626 num=0
13627 endif
13628 return
13629 endif
13630 endif
13631 do i=1,qvol
13632 if(zcoor.lt.wall2(i))then
13633 num=i
13634 return
13635 elseif(zcoor.eq.wall2(i))then
13636 if(veloc.gt.0)then
13637 if(i.lt.qvol)then
13638 num=i
13639 return
13640 else
13641 num=0
13642 return
13643 endif
13644 else
13645 if(i.gt.1)then
13646 num=i-1
13647 return
13648 else
13649 num=0
13650 return
13651 endif
13652 endif
13653 endif
13654 enddo
13655 return
13656 end
13657 +DECK,PRIVOLUM.
13658 subroutine PriVolume
13659
13660 implicit none
13661
13662 c include 'GoEvent.inc'
13663 +SEQ,GoEvent.
13664 c include 'volume.inc'
13665 +SEQ,volume.
13666 integer i
13667
13668 if(soo.eq.0)return
13669 write(oo,*)
13670 write(oo,*)' PriVolume: qvol=',qvol
13671 write(oo,*)
13672 + ' nvol upVol nMatVol sSensit sIonizat ',
13673 + 'wall1 wall2 wide RLenRVol'
13674 do i=1,qvol
13675 write(oo,'(I4,4I8,3F10.4,F10.6)')i, upVol(i),nMatVol(i),
13676 + sSensit(i),
13677 + sIonizat(i),
13678 + wall1(i),wall2(i),wide(i),RLenRVol(i)
13679 if(sSensit(i).ne.0)then
13680 write(oo,*)' numSensVol(i)=',numSensVol(i)
13681 write(oo,*)' numVolSens(numSensVol(i))=',
13682 + numVolSens(numSensVol(i))
13683 endif
13684 if(sIonizat(i).ne.0)then
13685 write(oo,*)' numIoniVol(i)=',numIoniVol(i)
13686 write(oo,*)' numVolIoni(numIoniVol(i))=',
13687 + numVolIoni(numIoniVol(i))
13688 endif
13689 enddo ! qvol
13690 write(oo,*)
13691 + ' ',
13692 + ' RLenRAVol=',RLenRAVol
13693
13694 end
13695 +DECK,IniTrack.
13696 c This package deals with tracks of incident charged particles.
13697 c The particle goes from left plane of the detector to
13698 c the right plane.
13699 c It starts from some starting point and goes to some direction.
13700 c The energy of the particle is constant.
13701
13702 subroutine IniRATrack(pystart1, pystart2,
13703 + psigmaang)
13704
13705 c Randomization of the origin point
13706 c with uniform distribution with y-coordinate between
13707 c pystart1 and pystart2 , x=0.0
13708 c and initial direction around theta = 0.0
13709 c with Gauss distribution with sigma = psigmaang
13710
13711
13712 implicit none
13713
13714 real pystart1, pystart2, pang, pphiang, psigmaang
13715 c include 'ener.inc'
13716 +SEQ,ener.
13717 c include 'atoms.inc'
13718 +SEQ,atoms.
13719 c include 'matters.inc'
13720 +SEQ,matters.
13721 c include 'volume.inc'
13722 +SEQ,volume.
13723 c include 'track.inc'
13724 +SEQ,track.
13725
13726 ystart1=pystart1
13727 ystart2=pystart2
13728 sigmaang=psigmaang
13729 ystart=0.0
13730 pang=0.0
13731 pphiang=0.0
13732 call IniTrack(ystart, pang, pphiang)
13733 sign_ang=1
13734 srandtrack=1
13735 sigmtk = 0
13736
13737 end
13738 +DECK,INIRTRAC.
13739 subroutine IniRTrack(pystart1, pystart2, pang, pphiang)
13740
13741 c Randomization of the origin point
13742 c with uniform distribution with y-coordinate between
13743 c pystart1 and pystart2 , x=0.0.
13744 c Initial direction is defined by theta = pang, phi = pphiang
13745
13746
13747 implicit none
13748
13749 real pystart1, pystart2, pang, pphiang
13750 c include 'ener.inc'
13751 +SEQ,ener.
13752 c include 'atoms.inc'
13753 +SEQ,atoms.
13754 c include 'matters.inc'
13755 +SEQ,matters.
13756 c include 'volume.inc'
13757 +SEQ,volume.
13758 c include 'track.inc'
13759 +SEQ,track.
13760
13761 ystart1=pystart1
13762 ystart2=pystart2
13763 sigmaang=0.0
13764 ystart=0.0
13765 call IniTrack(ystart, pang, pphiang)
13766 sign_ang=1
13767 srandtrack=1
13768 sigmtk = 0
13769
13770 end
13771 +DECK,ININTRAC.
13772 subroutine IniNTrack
13773
13774 c
13775 c Generate the next track
13776 c It calls from GoEvent
13777 c If there are no randomization of the track requried
13778 c and the are no multiple scattering, it does nothing
13779 c except filling of some data structure.
13780
13781 implicit none
13782 c include 'ener.inc'
13783 +SEQ,ener.
13784 c include 'atoms.inc'
13785 +SEQ,atoms.
13786 c include 'matters.inc'
13787 +SEQ,matters.
13788 c include 'volume.inc'
13789 +SEQ,volume.
13790 c include 'track.inc'
13791 +SEQ,track.
13792 c include 'cconst.inc'
13793 +SEQ,cconst.
13794 real r
13795 real ranfl
13796 real pang,pphiang,pystart
13797 real yy,dimmy
13798
13799 integer n,nv,i
13800
13801 if(srandtrack.eq.1)then
13802 r=ranfl()
13803 ystart=ystart1+(ystart2-ystart1)*r
13804 if(sigmaang.gt.0.0)then
13805 10 call lranor(yy,dimmy)
13806 if(yy.lt.0.0) yy=-yy
13807 yy=yy*sigmaang
13808 if(yy.gt.1.0)goto 10
13809 ang=yy
13810 yy=ranfl()
13811 phiang=yy*2.0*PI
13812 pang=ang
13813 pphiang=phiang
13814 pystart=ystart
13815 call IniTrack(pystart, pang, pphiang)
13816 srandtrack=1 ! it falled in IniTrack
13817 endif
13818 endif
13819
13820 if(sigmtk.eq.1)then
13821 call TTrack
13822 else
13823 do nv=1,QVol
13824 pntmtk(3,nv)=wall1(nv)
13825 pntmtk(1,nv)=(wall1(nv)-wall1(1))*e3ang(1)/e3ang(3)
13826 pntmtk(2,nv)=(wall1(nv)-wall1(1))*e3ang(2)/e3ang(3)+ystart
13827 velmtk(1,nv)=e3ang(1)
13828 velmtk(2,nv)=e3ang(2)
13829 velmtk(3,nv)=e3ang(3)
13830 do i=1,3
13831 e1mtk(i,nv)=e1ang(i)
13832 e2mtk(i,nv)=e2ang(i)
13833 e3mtk(i,nv)=e3ang(i)
13834 enddo
13835 enddo
13836 pntmtk(3,qVol+1)=wall2(qVol)
13837 pntmtk(1,qVol+1)=(wall2(qVol)-wall1(1))*e3ang(1)/e3ang(3)
13838 pntmtk(2,qVol+1)=(wall2(qVol)-wall1(1))
13839 + *e3ang(2)/e3ang(3)+ystart
13840 velmtk(1,qVol+1)=e3ang(1)
13841 velmtk(2,qVol+1)=e3ang(2)
13842 velmtk(3,qVol+1)=e3ang(3)
13843 do i=1,3
13844 e1mtk(i,qVol+1)=e1ang(i)
13845 e2mtk(i,qVol+1)=e2ang(i)
13846 e3mtk(i,qVol+1)=e3ang(i)
13847 enddo
13848
13849 Qmtk=qVol
13850 nmtk=Qmtk+1
13851 do n=1,Qmtk
13852 lenmtk(n)=sqrt((pntmtk(1,n+1)-pntmtk(1,n))**2+
13853 + (pntmtk(2,n+1)-pntmtk(2,n))**2+
13854 + (pntmtk(3,n+1)-pntmtk(3,n))**2 )
13855 enddo
13856 do n=1,Qmtk
13857 Tetamtk(n)=0.0
13858 enddo
13859 do n=1,Qmtk
13860 nVolmtk(n)=n
13861 enddo
13862 nVolmtk(Qmtk+1)=qVol
13863 do n=1,Qmtk
13864 vlenmtk(n)=lenmtk(n)
13865 nmtkvol1(n)=n
13866 nmtkvol2(n)=n
13867 xdvmtk(n)=0.0
13868 ydvmtk(n)=0.0
13869 enddo
13870
13871 endif
13872
13873 end
13874 +DECK,INITRACK.
13875 subroutine IniTrack(pystart, pang, pphiang)
13876
13877 c
13878 c Simple initialization of the track
13879 c
13880
13881 implicit none
13882
13883 real pystart, pang, pphiang
13884 c include 'ener.inc'
13885 +SEQ,ener.
13886 c include 'atoms.inc'
13887 +SEQ,atoms.
13888 c include 'matters.inc'
13889 +SEQ,matters.
13890 c include 'volume.inc'
13891 +SEQ,volume.
13892 c include 'track.inc'
13893 +SEQ,track.
13894
13895 ystart=pystart
13896 srandtrack=0
13897 if(pystart.eq.0.and.pang.eq.0.and.pphiang.eq.0)then
13898 sign_ang=0
13899 e1ang(1)=1
13900 e1ang(2)=0
13901 e1ang(3)=0
13902 e2ang(1)=0
13903 e2ang(2)=1
13904 e2ang(3)=0
13905 e3ang(1)=0
13906 e3ang(2)=0
13907 e3ang(3)=1
13908 else
13909 sign_ang=1
13910 ang=pang
13911 phiang=pphiang
13912 c xstart=pxstart
13913 c this is for geometry without angle phi
13914 c e1ang(1)=cos(ang)
13915 c e1ang(2)=0
13916 c e1ang(3)=-sin(ang)
13917 c e2ang(1)=0
13918 c e2ang(2)=1
13919 c e2ang(3)=0
13920 c e3ang(1)=sin(ang)
13921 c e3ang(2)=0
13922 c e3ang(3)=cos(ang)
13923 c this is for complete geometry
13924 e1ang(1)=cos(ang)*cos(phiang)
13925 e1ang(2)=cos(ang)*sin(phiang)
13926 e1ang(3)=-sin(ang)
13927 e2ang(1)=-sin(phiang)
13928 e2ang(2)=cos(phiang)
13929 e2ang(3)=0
13930 e3ang(1)=sin(ang)*cos(phiang)
13931 e3ang(2)=sin(ang)*sin(phiang)
13932 e3ang(3)=cos(ang)
13933 endif
13934
13935 end
13936 +DECK,INIMTRAC.
13937 subroutine IniMTrack(psruthmtk, pmlammtk, pmTetacmtk)
13938 c
13939 c initialization of the axiliary variables for multiple
13940 c scatering of the incident particle.
13941 c It have to be called after each initialization of the
13942 c new particle if the multiple scatering is desirable.
13943 c If it is not needed, the subroutine must not be called at all.
13944
13945 c psruthmtk - sign of Rutherford scattering (1)
13946 c 1 is recomended
13947 c pmlammtk - minimum mean lengt of range
13948 c multiplied by density. sm*gr/sm**3 = gr/sm**2
13949 c pmTetacmtk - minimum threshold turn angle
13950 c The program find the maximum of pmTetacmtk and
13951 c the same angle calculated from pmlammtk, and then,
13952 c the program recalculates mlammtk.
13953 c For psruthmtk = 0 there is another algorithm.
13954 c To have right results pmlammtk have to be
13955 c 10-100 times lower than widht of the detector.
13956 c The pmTetacmtk have to correspont detector resolution.
13957
13958 c
13959 implicit none
13960
13961 c include 'GoEvent.inc'
13962 +SEQ,GoEvent.
13963 c include 'ener.inc'
13964 +SEQ,ener.
13965 c include 'atoms.inc'
13966 +SEQ,atoms.
13967 c include 'matters.inc'
13968 +SEQ,matters.
13969 c include 'crosec.inc'
13970 +SEQ,crosec.
13971 c include 'volume.inc'
13972 +SEQ,volume.
13973 c include 'cconst.inc'
13974 +SEQ,cconst.
13975 c include 'track.inc'
13976 +SEQ,track.
13977 c include 'part.inc'
13978 +SEQ,part.
13979
13980 integer psruthmtk
13981 real pmlammtk, pmTetacmtk
13982
13983 integer nm
13984 real lam,mT,A
13985 real*8 B
13986 real msig,x
13987 real*8 r
13988
13989 sigmtk=1
13990 sruthmtk=psruthmtk
13991 mlammtk=pmlammtk
13992 mTetacmtk=pmTetacmtk
13993
13994 do nm=1,pQMat
13995 if(qAtMat(nm).gt.0)then
13996
13997 if(sruthmtk.eq.1)then
13998
13999 lam=mlammtk/DensMat(nm)
14000
14001 * write(oo,*)' lam=',lam
14002 c Calculate the minimum angle for restriction of field by
14003 c atomic shell
14004 mT=2.0*asin(1.0/
14005 + (2.0*partmom*Z_Mean(nm)*5.07e2))
14006 rTetacmtk(nm)=mT
14007 * write(oo,*)' mT=',mT
14008 if(mT.lt.mTetacmtk)then
14009 mT=mTetacmtk ! Throw out too slow interaction. They
14010 ! do not influent to anything
14011 endif
14012 c Calculate the cut angle due to mean free part
14013 A=RuthMat(nm)/(partmom2*beta2)/(5.07e10)**2
14014 * B=1.0/(lam*A) ! B is double precision
14015 B=(lam*A) ! B is double precision
14016 * Tetacmtk(nm)=acos( (B-1.0) / (B+1.0) )
14017 * B = sqrt( 1.0 / (B+1.0) )
14018 B = sqrt( B / (B+1.0) )
14019 Tetacmtk(nm)=2.0 * asin(B)
14020 c If it too little, reset it. It will lead to increasing
14021 c of lamBdel and decriasing of calculation time.
14022 * write(oo,*)' A=',A,' B=',B,' Tetacmtk(nm)=',Tetacmtk(nm)
14023 if(Tetacmtk(nm).lt.mT)then
14024 Tetacmtk(nm)=mT
14025 B=mT ! B is double precision
14026 c r=cos(B) ! r is double precision
14027 c lam=A*(1.0+r)/(1.0-r)
14028 c lam=1.0/lam
14029 r=sin(B/2.0)
14030 lam=1/A * 2.0 * r*r / ( 1 + cos(B) )
14031 c lam=(partmom2*beta2*sin(Tetacmtk(nm)/2.0)**2) / A
14032 endif
14033 * write(oo,*)' lam=',lam
14034
14035 lammtk(nm)=lam
14036 B=Tetacmtk(nm)
14037 CosTetac12mtk(nm)=cos(B/2.0)
14038 SinTetac12mtk(nm)=sin(B/2.0)
14039
14040 else
14041 c gauss formula
14042
14043 msig=mTetacmtk
14044 x=msig/(sqrt(2.0)*13.6/(sqrt(beta2)*partmom))
14045 x=x*x
14046
14047 c x=x/DensMat(nm)
14048 x=x*RLenMat(nm)
14049 lam=mlammtk/DensMat(nm)
14050 c write(oo,*)' x=',x,' rleng=',rleng
14051 c reset if it is too large
14052 if(lam.lt.x)lam=x
14053
14054 lammtk(nm)=lam
14055 msigmtk=sqrt(2.0)*13.6/(sqrt(beta2)*partmom)
14056
14057 endif
14058
14059 endif
14060 enddo
14061
14062 nmtk=1
14063 Qmtk=0
14064 nVolmtk(1)=0
14065
14066
14067 end
14068 +DECK,TTRACK.
14069 subroutine TTrack
14070
14071 implicit none
14072 c include 'GoEvent.inc'
14073 +SEQ,GoEvent.
14074 c include 'ener.inc'
14075 +SEQ,ener.
14076 c include 'atoms.inc'
14077 +SEQ,atoms.
14078 c include 'matters.inc'
14079 +SEQ,matters.
14080 c include 'volume.inc'
14081 +SEQ,volume.
14082 c include 'track.inc'
14083 +SEQ,track.
14084
14085 real*8 mleng,rleng
14086 integer nsv
14087 real*8 rst(3),rl
14088 integer j
14089
14090 if(qVol.le.0)then
14091 write(oo,*)' error in TTrack: there are not volumes'
14092 stop
14093 endif
14094
14095 1 nmtk=1
14096 pntmtk(1,1)=0.0
14097 pntmtk(2,1)=ystart
14098 pntmtk(3,1)=wall1(1)
14099 velmtk(1,1)=e3ang(1)
14100 velmtk(2,1)=e3ang(2)
14101 velmtk(3,1)=e3ang(3)
14102 sgnmtk=1
14103 sturnmtk=0
14104 nmtkvol1(1)=1
14105 vlenmtk(1)=0.0
14106 nVolmtk(nmtk)=0
14107
14108 10 if(sgnmtk.eq.1)then
14109 call VolNumZcoor(pntmtk(3,nmtk),velmtk(3,nmtk),nVolmtk(nmtk))
14110 sgnmtk=0
14111 if(nVolmtk(nmtk).ne.0)then
14112 vlenmtk(nVolmtk(nmtk))=0.0
14113 endif
14114 endif
14115 if(nVolmtk(nmtk).eq.0)then
14116 go to 100
14117 endif
14118
14119 call MakeNewSys
14120 + (e1mtk(1,nmtk),e2mtk(1,nmtk),e3mtk(1,nmtk),velmtk(1,nmtk))
14121
14122 if(sturnmtk.eq.1)then
14123 call TurnTrack
14124 sturnmtk=0
14125 if(velmtk(3,nmtk).le.0.0)then
14126 write(oo,*)' worning in TTrack: particle goes back'
14127 go to 1
14128 endif
14129 endif
14130 call VolPathLeng
14131 + (pntmtk(3,nmtk),velmtk(1,nmtk),nVolmtk(nmtk),mleng)
14132 if(nMatVol(nVolmtk(nmtk)).eq.0)then ! empty volume: no interaction
14133 lenmtk(nmtk)=mleng
14134 sgnmtk=1
14135 sturnmtk=0
14136 else
14137 if(sruthmtk.eq.1)then !lengt to coulomb interaction
14138 call SRLengmtk(rleng)
14139 else
14140 call SMLengmtk(rleng)
14141 endif
14142 if(rleng.le.mleng)then
14143 lenmtk(nmtk)=rleng
14144 sturnmtk=1
14145 sgnmtk=0
14146 else
14147 lenmtk(nmtk)=mleng
14148 sgnmtk=1
14149 if(sruthmtk.eq.1)then
14150 sturnmtk=0
14151 else
14152 sturnmtk=1
14153 endif
14154 endif
14155 endif
14156 do j=1,3
14157 pntmtk(j,nmtk+1)=
14158 + pntmtk(j,nmtk)+lenmtk(nmtk)*velmtk(j,nmtk)
14159 velmtk(j,nmtk+1)=velmtk(j,nmtk)
14160 enddo
14161 vlenmtk(nVolmtk(nmtk))=vlenmtk(nVolmtk(nmtk))+lenmtk(nmtk)
14162 nVolmtk(nmtk+1)=nVolmtk(nmtk)
14163 if(sgnmtk.eq.1)then
14164 nmtkvol2(nVolmtk(nmtk))=nmtk
14165 nmtkvol1(nVolmtk(nmtk)+1)=nmtk+1
14166 if(sSensit(nVolmtk(nmtk)).eq.1)then
14167 nsv=numSensVol(nVolmtk(nmtk))
14168 rst(3)=(wall2(nVolmtk(nmtk))-wall1(1)) ! it was error here
14169 rl=rst(3)/e3ang(3)
14170 rst(1)=e3ang(1)*rl
14171 rst(2)=e3ang(2)*rl
14172 xdvmtk(nsv)=pntmtk(1,nmtk+1)-rst(1)
14173 ydvmtk(nsv)=pntmtk(2,nmtk+1)-rst(2)
14174 endif
14175 endif
14176 if(nmtk.ge.pQmtk-2)then
14177 write(oo,*)' worning of TTrack: '
14178 write(oo,*)
14179 + ' Overflow of mtk. You have increase the common blok'
14180 go to 1
14181 endif
14182 nmtk=nmtk+1
14183 go to 10
14184
14185
14186
14187 100 Qmtk=nmtk-1
14188
14189 end
14190 +DECK,SRLENGMT.
14191 subroutine SRLengmtk(rleng)
14192 c
14193 c Step lenght limit due to multiple scatering
14194 c The method with Rutherford cross section
14195 c
14196 implicit none
14197
14198 real ranfl
14199 real*8 rleng
14200
14201 c include 'GoEvent.inc'
14202 +SEQ,GoEvent.
14203 c include 'ener.inc'
14204 +SEQ,ener.
14205 c include 'atoms.inc'
14206 +SEQ,atoms.
14207 c include 'matters.inc'
14208 +SEQ,matters.
14209 c include 'crosec.inc'
14210 c include 'volume.inc'
14211 +SEQ,volume.
14212 c include 'track.inc'
14213 +SEQ,track.
14214
14215 real r
14216
14217 r=ranfl()
14218 if(r.gt.0.99999)then
14219 rleng=1.0e30
14220 return
14221 endif
14222 rleng=-lammtk(nMatVol(nVolmtk(nmtk)))*alog(1.0-r)
14223 c write(oo,*)' SRLengBdel'
14224 c write(oo,*)' r,lamBdel,rleng',r,lamBdel,rleng
14225
14226 end
14227
14228 subroutine SMLengmtk(rleng)
14229 c
14230 c Step lenght limit due to multiple scatering
14231 c The method with mean multiple scatering angle form
14232 c
14233 implicit none
14234
14235 real*8 rleng
14236
14237 c include 'GoEvent.inc'
14238 +SEQ,GoEvent.
14239 c include 'ener.inc'
14240 +SEQ,ener.
14241 c include 'atoms.inc'
14242 +SEQ,atoms.
14243 c include 'matters.inc'
14244 +SEQ,matters.
14245 c include 'volume.inc'
14246 +SEQ,volume.
14247 c include 'track.inc'
14248 +SEQ,track.
14249
14250 rleng=lammtk(nMatVol(nVolmtk(nmtk)))
14251
14252 end
14253 +DECK,TURNTRAC.
14254 subroutine TurnTrack
14255
14256 implicit none
14257
14258 c include 'GoEvent.inc'
14259 +SEQ,GoEvent.
14260 c include 'ener.inc'
14261 +SEQ,ener.
14262 c include 'atoms.inc'
14263 +SEQ,atoms.
14264 c include 'matters.inc'
14265 +SEQ,matters.
14266 c include 'crosec.inc'
14267 c include 'volume.inc'
14268 +SEQ,volume.
14269 c include 'part.inc'
14270 +SEQ,part.
14271 c include 'track.inc'
14272 +SEQ,track.
14273 c include 'cconst.inc'
14274 +SEQ,cconst.
14275
14276 real ranfl
14277 real*8 r,rs,rsin12,rcos12
14278 real*8 x,msig
14279 real rra,rrb
14280
14281 if(sruthmtk.eq.1)then
14282
14283 r=ranfl()
14284 c rs=cos(Tetacmtk(nMatVol(nVolmtk(nmtk-1))))
14285 c rs=CosTetacmtk(nMatVol(nVolmtk(nmtk-1)))
14286 c rs=1.0-(1.0-rs)/(1.0-r*0.5*(1.0+rs))
14287 rsin12=SinTetac12mtk(nMatVol(nVolmtk(nmtk-1)))
14288 rcos12=CosTetac12mtk(nMatVol(nVolmtk(nmtk-1)))
14289 rs = 1.0 - r * rcos12 * rcos12
14290 if(rs.eq.0.0)then
14291 Tetamtk(nmtk-1)=PI
14292 else
14293 rs=rsin12 / sqrt( rs )
14294 rs=2.0 * asin(rs)
14295 Tetamtk(nmtk-1)=rs
14296 endif
14297
14298 else
14299
14300 x=lenmtk(nmtk-1)/RLenMat(nMatVol(nVolmtk(nmtk-1)))
14301 c it can not be called for first step
14302 c msig=sqrt(2.0)*13.6/(sqrt(beta2)*partmom)*
14303 c + sqrt(x)
14304 msig=msigmtk*
14305 + sqrt(x)
14306 call lranor(rra,rrb)
14307 Tetamtk(nmtk-1)=rra*msig
14308 c write(oo,*)' msig,TetaBdel,rra=',msig,TetaBdel,rra
14309
14310 endif
14311
14312 call turnvec
14313 + (e1mtk(1,nmtk-1),e2mtk(1,nmtk-1),e3mtk(1,nmtk-1),Tetamtk(nmtk-1),
14314 + velmtk(1,nmtk))
14315
14316 end
14317 +DECK,PRITRACK.
14318 subroutine PriTrack
14319
14320 implicit none
14321 c include 'GoEvent.inc'
14322 +SEQ,GoEvent.
14323 c include 'ener.inc'
14324 +SEQ,ener.
14325 c include 'atoms.inc'
14326 +SEQ,atoms.
14327 c include 'matters.inc'
14328 +SEQ,matters.
14329 c include 'volume.inc'
14330 +SEQ,volume.
14331 c include 'track.inc'
14332 +SEQ,track.
14333
14334
14335 if(soo.eq.0)return
14336 write(oo,*)
14337 write(oo,*)' PriTrack:'
14338 write(oo,*)' ystart1,2, ystart=',ystart1,ystart2,ystart
14339 write(oo,*)' srandtrack=',srandtrack
14340 if(sign_ang.eq.0)then
14341 write(oo,*)' parallel track'
14342 else
14343 write(oo,*)' ang=',ang,' phiang=',phiang,
14344 + ' sigmaang=',sigmaang
14345 write(oo,*)' e1ang()=',e1ang(1),e1ang(2),e1ang(3)
14346 write(oo,*)' e2ang()=',e2ang(1),e2ang(2),e2ang(3)
14347 write(oo,*)' e3ang()=',e3ang(1),e3ang(2),e3ang(3)
14348 endif
14349 end
14350 +DECK,PRIMTRAC.
14351 subroutine PriMTrack(k)
14352 c
14353 c k can be equal to 0,1,2,3,4
14354 c
14355
14356 implicit none
14357
14358 integer k
14359
14360 c include 'GoEvent.inc'
14361 +SEQ,GoEvent.
14362 c include 'ener.inc'
14363 +SEQ,ener.
14364 c include 'atoms.inc'
14365 +SEQ,atoms.
14366 c include 'matters.inc'
14367 +SEQ,matters.
14368 c include 'volume.inc'
14369 +SEQ,volume.
14370 c include 'track.inc'
14371 +SEQ,track.
14372
14373 integer nm,n,i,j,nv,nsv
14374
14375 if(soo.eq.0)return
14376 write(oo,*)
14377 write(oo,*)' PriMTrack: k=',k
14378 write(oo,*)' sigmtk=',sigmtk
14379 c if(sigmtk.eq.1)then
14380 if(sigmtk.eq.1)then
14381 write(oo,*)' sruthmtk=',sruthmtk
14382 write(oo,*)' mlammtk=',mlammtk,' mTetacmtk=',mTetacmtk
14383 endif
14384 write(oo,*)' qmtk=',qmtk,' nmtk=',nmtk
14385
14386 if(k.eq.1)then
14387 write(oo,*)' way of particle'
14388 do n=1,nmtk
14389 write(oo,*)' n=',n
14390 write(oo,*)' pntmtk(1,2,3 ',
14391 + ' velmtk(1,2,3'
14392 write(oo,'(6(1X,e12.6))')(pntmtk(j,n),j=1,3),(velmtk(j,n),j=1,3)
14393 write(oo,*)' lenmtk, Tetamtk, nVolmtk'
14394 write(oo,'(1X,e12.6,1X,e12.6,1X,i7)')
14395 + lenmtk(n),Tetamtk(n),nVolmtk(n)
14396 write(oo,*)' e1mtk=',(e1mtk(i,n),i=1,3)
14397 write(oo,*)' e2mtk=',(e2mtk(i,n),i=1,3)
14398 write(oo,*)' e3mtk=',(e3mtk(i,n),i=1,3)
14399 enddo
14400 endif
14401
14402 if(sigmtk.eq.1)then
14403 if(k.eq.2)then
14404 write(oo,*)' material constants:'
14405 write(oo,*)' msigmtk=',msigmtk
14406 write(oo,*)' nm, lammtk(nmat), Tetacmtk(nmat)',
14407 + ' CosTetac12mtk(nmat), SinTetac12mtk(nmat)'
14408 do nm=1,pQMat
14409 if(qAtMat(nm).gt.0)then
14410 write(oo,*)nm,lammtk(nm),Tetacmtk(nm),rTetacmtk(nm),
14411 + CosTetac12mtk(nm),SinTetac12mtk(nm)
14412 endif
14413 enddo
14414 endif
14415 endif
14416
14417 if(sigmtk.eq.1)then
14418 if(k.eq.3)then
14419 if(nVolmtk(nmtk).ne.0)then
14420 write(oo,*)' given point:'
14421 write(oo,*)' pntmtk(1,2,3, ',
14422 + ' velmtk(1,2,3'
14423 write(oo,'(6(1X,e12.6))')
14424 + (pntmtk(j,nmtk),j=1,3),(velmtk(j,nmtk),j=1,3)
14425 write(oo,*)' lenmtk, Tetamtk, nVolmtk'
14426 write(oo,'(1X,e12.6,1X,e12.6,1X,i7)')
14427 + lenmtk(nmtk),Tetamtk(nmtk),nVolmtk(nmtk)
14428 write(oo,*)' e1mtk=',(e1mtk(i,nmtk),i=1,3)
14429 write(oo,*)' e2mtk=',(e2mtk(i,nmtk),i=1,3)
14430 write(oo,*)' e3mtk=',(e3mtk(i,nmtk),i=1,3)
14431 endif
14432 endif
14433 endif
14434
14435 if(k.eq.4)then
14436 if(qmtk.ge.1)then
14437 write(oo,*)' volimes info:'
14438 write(oo,*)
14439 + ' nv, ',
14440 + ' vlenmtk(pQVol), nmtkvol1(pQVol), nmtkvol2(pQVol)'
14441 c write(oo,*)' if sensitive, nsv,xdvmtk(nsv),ydvmtk(nsv)'
14442 do nv=1,qVol
14443 write(oo,*)nv, vlenmtk(nv), nmtkvol1(nv), nmtkvol2(nv)
14444 if(sSensit(nv).eq.1)then
14445 write(oo,*)' sensitive: nsv,xdvmtk(nsv),ydvmtk(nsv)'
14446 nsv=numSensVol(nv)
14447 write(oo,*)' ',nsv,xdvmtk(nsv),ydvmtk(nsv)
14448 endif
14449 enddo
14450 endif
14451 endif
14452
14453 c endif
14454
14455 end
14456 +DECK,IniPart.
14457 subroutine IniPart(ptkin,pmass)
14458 c
14459 c Initialize the incident particle
14460 c
14461 implicit none
14462
14463 c include 'GoEvent.inc'
14464 +SEQ,GoEvent.
14465 c include 'cconst.inc'
14466 +SEQ,cconst.
14467 c include 'part.inc'
14468 +SEQ,part.
14469
14470 real ptkin,pmass
14471 real*8 gamma,r,rm2,rme
14472 if(ptkin.le.0.0.or.pmass.le.0.0.or.ptkin.lt.1e-3*pmass)then
14473 write(oo,*)' error in IniPart: wrong parameters:'
14474 write(oo,*)' ptkin=',ptkin,' pmass=',pmass
14475 if(sret_err.eq.0) stop
14476 s_err=1
14477 return
14478 endif
14479 tkin=ptkin
14480 mass=pmass
14481 gamma=tkin/mass+1.0
14482 partgamma=gamma
14483 beta2=1.0-1.0/(gamma*gamma)
14484 r=mass/(tkin+mass)
14485 beta12=r*r
14486 partmom2=tkin*tkin+2.0*tkin*mass
14487 partmom=sqrt(partmom2)
14488 if(mass.ge.0.500.and.mass.le.0.515)then
14489 emax=tkin
14490 s_pri_elec=1
14491 else
14492 s_pri_elec=0
14493 rm2=mass*mass
14494 rme=ELMAS
14495 if(1.0-beta2 .gt. 1.0e-10)then
14496 emax=2.0*rm2*ELMAS*beta2/
14497 + ((rm2+rme*rme+2.0*rme*gamma*mass)*(1.0-beta2))
14498 if(emax.gt.tkin)emax=tkin
14499 else
14500 emax=tkin
14501 endif
14502 endif
14503 bem=beta2/emax
14504 coefPa=1.0/(FSCON*beta2*PI)
14505
14506 end
14507 +DECK,PRIPART.
14508 subroutine PriPart
14509
14510 implicit none
14511
14512 c include 'GoEvent.inc'
14513 +SEQ,GoEvent.
14514 c include 'part.inc'
14515 +SEQ,part.
14516
14517 if(soo.eq.0)return
14518
14519 write(oo,*)
14520 write(oo,*)' Particle: tkin=',tkin,' mass=',mass
14521 write(oo,*)' beta2=',beta2,' beta12=',beta12
14522 write(oo,*)' emax=',emax,' bem=',bem,' coefPa=',coefPa
14523
14524 end
14525 +DECK,IniCrose.
14526 Subroutine IniCrosec
14527 c
14528 c Initialization of ionization cross section for all the
14529 c matters which are in "ionization" volumes
14530 c
14531 implicit none
14532
14533 c include 'GoEvent.inc'
14534 +SEQ,GoEvent.
14535 c include 'ener.inc'
14536 +SEQ,ener.
14537 c include 'atoms.inc'
14538 +SEQ,atoms.
14539 c include 'matters.inc'
14540 +SEQ,matters.
14541 c include 'crosec.inc'
14542 +SEQ,crosec.
14543 c include 'volume.inc'
14544 +SEQ,volume.
14545
14546 integer nv,nm
14547
14548 if(qvol.le.0)then
14549 write(oo,*)' You forgot to initialize volumes'
14550 stop
14551 endif
14552 if(QIVol.le.0)then
14553 write(oo,*)' You forgot to initialize ioniz. volumes'
14554 stop
14555 endif
14556
14557 do nm=1,pQMat
14558 sMatC(nm)=0
14559 enddo
14560
14561 do nv=1,QIVol
14562 sMatC(nMatVol(numVolIoni(nv)))=1
14563 enddo
14564
14565 do nm=1,pQMat
14566 if(sMatC(nm).eq.1)then
14567 call IniCrosecm(nm)
14568 endif
14569 enddo
14570
14571 end
14572 +DECK,INICROSM.
14573 Subroutine IniCrosecm(nmat)
14574 c
14575 c Initialization of ionization cross section for given matter
14576 c
14577 implicit none
14578
14579 c include 'GoEvent.inc'
14580 +SEQ,GoEvent.
14581 c include 'ener.inc'
14582 +SEQ,ener.
14583 c include 'atoms.inc'
14584 +SEQ,atoms.
14585 c include 'matters.inc'
14586 +SEQ,matters.
14587 c include 'part.inc'
14588 +SEQ,part.
14589 c include 'crosec.inc'
14590 +SEQ,crosec.
14591 c include 'cconst.inc'
14592 +SEQ,cconst.
14593
14594 integer nmat
14595
14596 c real spa,sio
14597
14598 integer i
14599 real*8 r,R0,R1,R2,R3,RR12,RR22
14600 real*8 s,sa
14601 integer k
14602
14603 c real ALOG,SQRT,ATAN
14604 real fquan,fmean,fmean1
14605 integer nen,nat,nsh,nshc,ne
14606 c integer nat0,nat1,iat
14607
14608 c real spa(pqener) ! sum of photoabsorption
14609 c ! It is luzy to put it to matter.
14610
14611 real*8 delta,pg,pg2
14612
14613 complex*16 eeee
14614 real*8 eee(2)
14615 equivalence (eeee,eee(1))
14616
14617 c MatC=nmat
14618
14619 c ksi=0.1534*DensMat(nmat)*Z_Mean(nmat)/(beta2*A_Mean(nmat))
14620
14621 DO 100 I=1,qener
14622 R=-EPSI1(I,nmat)+(1.0+EPSI1(I,nmat))*BETA12
14623 R=R*R+beta2*beta2*EPSI2(I,nmat)*EPSI2(I,nmat)
14624 R=1.0/SQRT(R)
14625 R=DLOG(R)
14626 LOG1C(I,nmat)=R
14627 100 CONTINUE
14628 C
14629 DO 200 I=1,qener
14630 R=2.0*0.511*beta2/ENERC(I)
14631 if(R.gt.1.0)then
14632 R=DLOG(R)
14633 else
14634 R=0.0
14635 endif
14636 LOG2C(I,nmat)=R
14637 200 continue
14638 c
14639
14640
14641 DO 300 I=1,qener
14642 R0=1.0+EPSI1(I,nmat)
14643 R=-EPSI1(I,nmat)+R0*BETA12
14644 RR12=R0*R0
14645 RR22=EPSI2(I,nmat)*EPSI2(I,nmat)
14646 R1=(-R0*R+beta2*RR22)/(RR12+RR22)
14647 R2=EPSI2(I,nmat)*Beta2/R
14648 R3=ATAN(R2)
14649 IF(R.LT.0.0) R3=3.14159+R3
14650
14651 c R2=R/(EPSI2(I,nmat)*Beta2) ! it is the same as
14652 c previous three lines but less exactly
14653 c if EPSI2 --> 0
14654 c R3=PI/2.0 - ATAN(R2)
14655
14656 chereCangle(I,nmat)=R3
14657 CHEREC(I,nmat)=(COEFPa/ElDENSMat(nmat))*R1*R3
14658
14659 c spa=0.0
14660 c sio=0.0
14661 c
14662 c do nat=1,QAtMat(nmat)
14663 c do nsh=1,QShellAt(AtMat(nat,nmat))
14664 c
14665 c spa=spa+PhotAt(I,nsh,nat)
14666 c sio=sio+PhotIonAt(I,nsh,nat)
14667 c
14668 c enddo
14669 c enddo
14670 c if(spa.gt.0.0)then
14671 c CHEREC(I,nmat)=CHEREC(I,nmat)*sio/spa
14672 c endif
14673 300 continue
14674
14675 c debug:
14676 c write(oo,*)' probb'
14677 c do nen=1,qener
14678 c
14679 c R=log1C(nen,nmat)*coefPa*PhotIonMat(nen,nmat)
14680 c + /(enerc(nen)*Z_Mean(nmat))
14681 c if(PhotMat(nen,nmat).gt.0.0)then
14682 c R1= R + PhotIonMat(nen,nmat)/PhotMat(nen,nmat)*CHEREC(nen,nmat)
14683 c endif
14684 c r2=r1+log2C(nen,nmat)*coefPa*PhotIonMat(nen,nmat)
14685 c + /(enerc(nen)*Z_Mean(nmat))
14686 c write(oo,'(5E10.3)')enerc(nen),R,CHEREC(nen,nmat),R1,r2
14687 c
14688 c enddo
14689 c end debug
14690
14691
14692 nshc=0
14693 do 800 nat=1,QAtMat(nmat)
14694
14695 do 700 nsh=1,QShellAt(AtMat(nat,nmat))
14696
14697 nshc=nshc+1
14698
14699 NAtMC(nshc,nmat)=nat
14700 NAtAC(nshc,nmat)=AtMat(nat,nmat)
14701 NSheC(nshc,nmat)=nsh
14702
14703 do 400 nen=1,qener
14704
14705 flog1(nen,nshc,nmat)=
14706 + WeightAtMat(nat,nmat)*log1C(nen,nmat)*coefPa*
14707 + PhotIonAt(nen,nsh,AtMat(nat,nmat))/
14708 + (enerc(nen)*Z_Mean(nmat))
14709
14710 flog2(nen,nshc,nmat)=
14711 + WeightAtMat(nat,nmat)*log2C(nen,nmat)*coefPa*
14712 + PhotIonAt(nen,nsh,AtMat(nat,nmat))/
14713 + (enerc(nen)*Z_Mean(nmat))
14714
14715 if(PhotMat(nen,nmat).gt.0.0)then
14716
14717 cher(nen,nshc,nmat)= chereC(nen,nmat)*
14718 + WeightAtMat(nat,nmat)*
14719 + PhotIonAt(nen,nsh,AtMat(nat,nmat))/
14720 + PhotMat(nen,nmat)
14721 c + WeightAtMat(nat,nmat)*chereC(nen,nmat)*
14722 c + WeightShAt(nsh,AtMat(nat,nmat))
14723
14724 else
14725
14726 cher(nen,nshc,nmat)=0.0
14727
14728 endif
14729
14730 400 continue
14731
14732 s=0
14733
14734 do 500 nen=1,qener
14735
14736 r=PhotAt(nen,nsh,AtMat(nat,nmat))*WeightAtMat(nat,nmat)*
14737 + (ener(nen+1)-ener(nen))
14738 rezer(nen,nshc,nmat)=s+0.5*r
14739 if(enerc(nen).gt.MinThresholdAt(AtMat(nat,nmat))
14740 + .and.
14741 + enerc(nen).lt.emax)then ! kinematical limit
14742 if(s_pri_elec.eq.0)then
14743 frezer(nen,nshc,nmat)=(s+0.5*r)*coefPa/
14744 + (enerc(nen)*enerc(nen)*Z_Mean(nmat))*
14745 + (1.0-beta2*enerc(nen)/emax +
14746 + enerc(nen)*enerc(nen)/
14747 + (2.0*(tkin+mass)*(tkin+mass)))
14748 else
14749 delta=enerc(nen)/mass
14750 pg=partgamma
14751 pg2=pg*pg
14752 frezer(nen,nshc,nmat)=(s+0.5*r)*coefPa/
14753 + Z_Mean(nmat) * beta2/mass *
14754 + 1.0/(pg2-1) *
14755 + ((pg-1)**2 * pg2 / ((delta*(pg-1-delta))**2)
14756 + -
14757 + (2*pg2 + 2*pg - 1)/
14758 + (delta*(pg-1-delta))
14759 + + 1 )
14760
14761 endif
14762 else
14763 frezer(nen,nshc,nmat)=0.0
14764 endif
14765 s=s+r
14766
14767 500 continue
14768
14769 700 continue
14770
14771 800 continue
14772
14773 QShellC(nmat)=nshc
14774 r=0.0
14775
14776 c add cherenkov radiation to lowest energy level shell
14777 c nat0=NAtAC(1)
14778 c iat=1
14779 c nat1=nat0
14780 c nsh=NSheC(1)
14781 c i=1
14782 c850 do nshc=1,QShellC
14783 c if(NAtAC(nshc).eq.nat0)then
14784 c if(NSheC(nshc).gt.nsh)then
14785 c nsh=NSheC(nshc)
14786 c i=nshc
14787 c endif
14788 c else
14789 c if(nshc.gt.iat.and.nat1.eq.nat0)then
14790 c iat=nshc
14791 c nat1=NAtAC(nshc)
14792 c endif
14793 c endif
14794 c enddo
14795 c write(oo,*)' crosec: i,nat0,nat1,nmat,iat='
14796 c write(oo,*)i,nat0,nat1,nmat,iat
14797 c if(nat1.gt.nat0)then
14798 c nat=nat1
14799 c go to 850
14800 c endif
14801
14802 c The cherenkov is added to last shell
14803 c i=0
14804 c do nat=1,QAtMat(nmat)
14805 c i=i+QShellAt(AtMat(nat,nmat))
14806 c do nen=1,qener
14807 c cher(nen,i,nmat)=
14808 c + WeightAtMat(nat,nmat)*chereC(nen,nmat)
14809 cc write(oo,*)cher(nen,i),WeightAtMat(nat,nmat),
14810 cc + chereC(nen)
14811 c enddo
14812 c enddo
14813
14814
14815 do 1000 nen=1,qener
14816
14817 s=0.0
14818 sa=0.0
14819 k=0.0
14820
14821 DO nshc=1,QShellC(nmat)
14822 ADDA(nen,nshc,nmat)=FLOG1(nen,nshc,nmat)+
14823 + FLOG2(nen,nshc,nmat)+FREZER(nen,nshc,nmat)
14824 c ADDA(nen,nshc,nmat)=FLOG1(nen,nshc,nmat)+
14825 c + FLOG2(nen,nshc,nmat)
14826 s=s+ADDA(nen,nshc,nmat)
14827
14828 if(enerc(nen).gt.min_ioniz_pot(nmat))then
14829 ADDA(nen,nshc,nmat)=ADDA(nen,nshc,nmat)+
14830 + cher(nen,nshc,nmat)
14831 if(ADDA(nen,nshc,nmat).lt.0.0)then
14832 write(oo,*)' worning of IniCrosec: negative ADDA'
14833 write(oo,*)' nmat=',nmat,' nshc=',nshc,' nen=',nen
14834 ADDA(nen,nshc,nmat)=0.0
14835 endif
14836 endif
14837
14838 enddo
14839
14840 c if(enerc(nen).gt.min_ioniz_pot(nmat))then
14841 c if(s.lt.-chereC(nen,nmat))then
14842 c DO nshc=1,QShellC(nmat)
14843 c ADDA(nen,nshc,nmat)=0.0
14844 c enddo
14845 c else
14846 c s=1.0+chereC(nen,nmat)/s
14847 c DO nshc=1,QShellC(nmat)
14848 c ADDA(nen,nshc,nmat)=ADDA(nen,nshc,nmat)*s
14849 c enddo
14850 c endif
14851 c endif
14852
14853 s=0.0
14854 DO nshc=1,QShellC(nmat)
14855 s=s+ADDA(nen,nshc,nmat)
14856 enddo
14857 ADDAC(nen,nmat)=s
14858
14859
14860 c DO 900 nshc=1,QShellC(nmat)
14861 c R=FLOG1(nen,nshc,nmat)+FLOG2(nen,nshc,nmat)+
14862 c + FREZER(nen,nshc,nmat)
14863 cc IF(CHER(nen,nshc).LT.0.0)THEN
14864 c R=R+CHER(nen,nshc,nmat)
14865 cc END IF
14866 c IF(R.LT.0.0)THEN
14867 c K=1
14868 c SA=SA+R
14869 c ELSE
14870 c S=S+R
14871 c ENDIF
14872 c ADDA(nen,nshc,nmat)=R
14873 c900 ADDAC(nen,nmat)=ADDAC(nen,nmat)+ADDA(nen,nshc,nmat)
14874 c
14875 c IF(K.EQ.1)THEN
14876 c IF(ABS(SA).LT.S)THEN
14877 c DO 906 nshc=1,QShellC(nmat)
14878 c IF(ADDA(nen,nshc,nmat).GT.0.0)THEN
14879 c ADDA(nen,nshc,nmat)=ADDA(nen,nshc,nmat)*(1.0+SA/S)
14880 c ELSE
14881 c ADDA(nen,nshc,nmat)=0.0
14882 c END IF
14883 c906 CONTINUE
14884 c ELSE
14885 c DO 907 nshc=1,QShellC(nmat)
14886 c ADDA(nen,nshc,nmat)=0.0
14887 c907 CONTINUE
14888 c ADDAC(nen,nmat)=0.0
14889 c END IF
14890 c END IF
14891
14892 1000 continue
14893
14894 DO nshc=1,QShellC(nmat)
14895
14896 do nen=1,qener
14897 fadda(nen,nshc,nmat)=adda(nen,nshc,nmat)*
14898 + (ener(nen+1)-ener(nen))
14899 enddo
14900
14901 call lhispre(fadda(1,nshc,nmat),qener)
14902
14903 enddo
14904
14905 quanC(nmat)=fquan(addaC(1,nmat),1.0,nmat)
14906 meanC(nmat)=fmean(addaC(1,nmat),1.0,nmat)
14907
14908 if(s_pri_elec.eq.0)then
14909 meanC1(nmat)=fmean1(addaC(1,nmat),1.0,nmat)
14910 else
14911 meanC1(nmat)=0.0 ! for electrons it is not calculated
14912 endif
14913
14914 meaneleC(nmat)=meanC(nmat)/WWW(nmat)
14915 meaneleC1(nmat)=meanC1(nmat)/WWW(nmat)
14916
14917 do nshc=1,QShellC(nmat)
14918 c quan(nshc)=fquan(adda(1,nshc,nmat),
14919 c + WeightAtMat(NAtMC(nshc),nmat),nmat)
14920 c mean(nshc)=fmean(adda(1,nshc,nmat),
14921 c +WeightAtMat(NAtMC(nshc),nmat),nmat)
14922 quan(nshc,nmat)=fquan(adda(1,nshc,nmat),1.0,nmat)
14923 mean(nshc,nmat)=fmean(adda(1,nshc,nmat),1.0,nmat)
14924 enddo
14925
14926 do ne=1,qener
14927 eee(1)=dble(1.)+dble(epsi1(ne,nmat))
14928 eee(2)=dble(epsi2(ne,nmat))
14929 c write(oo,*)enerc(ne),eeee
14930 eeee=beta2*eeee - 1.0
14931 c write(oo,*)enerc(ne),eeee
14932 eeee=sqrt(eeee)
14933 c write(oo,*)enerc(ne),eeee
14934 eeee=enerc(ne)/sqrt(beta2) * eeee
14935 c write(oo,*)enerc(ne),eeee
14936 pocaz(ne,nmat)=eeee * 5.07e10
14937 c write(oo,*)enerc(ne),pocaz(ne,nmat)
14938 enddo
14939
14940
14941 end
14942 +DECK,FQUAN.
14943 function fquan(ad,weig,nmat)
14944 c
14945 c Calc. mean quantity of energy transfer for 1 sm
14946 c
14947 implicit none
14948
14949 c include 'ener.inc'
14950 +SEQ,ener.
14951 c include 'atoms.inc'
14952 +SEQ,atoms.
14953 c include 'matters.inc'
14954 +SEQ,matters.
14955
14956 real fquan,ad(*),weig
14957 integer nmat
14958 real step_integ_ar
14959
14960 fquan=step_integ_ar(ener,ad,qener,ener(1),ener(qener+1))
14961 fquan=fquan*weig*XElDensMat(nmat)
14962
14963 end
14964 +DECK,FMEAN.
14965 function fmean(ad,weig,nmat)
14966 c
14967 c Calc. mean energy loss for 1 sm
14968 c
14969 implicit none
14970
14971 c include 'ener.inc'
14972 +SEQ,ener.
14973 c include 'atoms.inc'
14974 +SEQ,atoms.
14975 c include 'matters.inc'
14976 +SEQ,matters.
14977
14978 real fmean,ad(*),weig
14979 integer nmat
14980 real step_integ_ar
14981 real addd(pqener)
14982
14983 integer nen
14984
14985 do nen=1,qener
14986 addd(nen)=ad(nen)*enerc(nen)
14987 enddo
14988 fmean=step_integ_ar(ener,addd,qener,ener(1),ener(qener+1))
14989 fmean=fmean*weig*XElDensMat(nmat)
14990
14991 end
14992 +DECK,FMEAN1.
14993 function fmean1(ad,weig,nmat)
14994 c
14995 c Calc. mean energy loss for 1 sm
14996 c
14997 implicit none
14998
14999 c include 'ener.inc'
15000 +SEQ,ener.
15001 c include 'atoms.inc'
15002 +SEQ,atoms.
15003 c include 'matters.inc'
15004 +SEQ,matters.
15005 c include 'part.inc'
15006 +SEQ,part.
15007 c include 'cconst.inc'
15008 +SEQ,cconst.
15009
15010 real fmean1,ad(*),weig
15011 integer nmat
15012 real step_integ_ar
15013 real addd(pqener)
15014 real e1,e2
15015
15016 integer nen
15017
15018 do nen=1,qener
15019 addd(nen)=ad(nen)*enerc(nen)
15020 enddo
15021 fmean1=step_integ_ar(ener,addd,qener,ener(1),ener(qener+1))
15022 fmean1=fmean1*weig*XElDensMat(nmat)
15023 if(emax.gt.ener(qener+1))then
15024 e1=ener(qener+1)
15025 e2=emax
15026
15027 fmean1 = fmean1 +
15028 + 2.0 * PI / (FSCON**2 * ELMAS * beta2)
15029 + * weig * XElDensMat(nmat) *
15030 + ( log(e2/e1) - bem * (e2-e1) +
15031 + (e2*e2-e1*e1)/(4.0 * (tkin+mass) * (tkin+mass) ) )
15032
15033 endif
15034
15035 end
15036 +DECK,PRICROSE.
15037 subroutine PriCrosec(nmat,lev)
15038
15039 implicit none
15040
15041 c include 'GoEvent.inc'
15042 +SEQ,GoEvent.
15043 c include 'ener.inc'
15044 +SEQ,ener.
15045 c include 'atoms.inc'
15046 +SEQ,atoms.
15047 c include 'matters.inc'
15048 +SEQ,matters.
15049 c include 'part.inc'
15050 c include 'crosec.inc'
15051 +SEQ,crosec.
15052 integer nmat
15053 integer lev
15054 integer nen
15055 integer nshc
15056
15057 if(soo.eq.0)return
15058
15059 if(lev.ge.1)then
15060 write(oo,*)
15061 write(oo,*)' PriCrosec:'
15062 write(oo,*)' material number ',nmat,
15063 + ' Quantity of shells is',QShellC(nmat)
15064 if(sMatC(nmat).ne.1)then
15065 write(oo,*)' This cross sect. was not initialized'
15066 return
15067 endif
15068 c write(oo,*)' ksi=',ksi
15069 write(oo,*)' quanC=',quanC(nmat)
15070 write(oo,*)' meanC=',meanC(nmat),' meaneleC=',meaneleC(nmat)
15071 write(oo,*)' meanC1=',meanC1(nmat),' meaneleC1=',meaneleC1(nmat)
15072 do nshc=1,QShellC(nmat)
15073 write(oo,*)' NAtMC=',NAtMC(nshc,nmat),' NAtAC=',NAtAC(nshc,nmat),
15074 + ' NSheC=',NSheC(nshc,nmat)
15075 write(oo,*)' quan=',quan(nshc,nmat),' mean=',mean(nshc,nmat)
15076 enddo
15077
15078 c write(oo,*)' ener,pocaz'
15079 c do nen=1,qener
15080 c write(oo,*)enerc(nen),pocaz(nen,nmat)
15081 c enddo
15082 if(lev.ge.2)then
15083 write(oo,*)' enerc, log1C, log2C',
15084 + ' chereC, addaC, chereCangle'
15085 do nen=1,qener
15086 write(oo,'(6e10.3)')enerc(nen),log1C(nen,nmat),log2C(nen,nmat),
15087 + chereC(nen,nmat),addaC(nen,nmat),chereCangle(nen,nmat)
15088 enddo
15089 if(lev.ge.3)then
15090 do nshc=1,QShellC(nmat)
15091 write(oo,*)' enerc, flog1, flog2, cher, ',
15092 + ' rezer, frezer, adda, fadda'
15093 do nen=1,qener
15094 write(oo,'(8e10.3)')enerc(nen),flog1(nen,nshc,nmat),
15095 + flog2(nen,nshc,nmat),
15096 + cher(nen,nshc,nmat),rezer(nen,nshc,nmat),
15097 + frezer(nen,nshc,nmat),
15098 + adda(nen,nshc,nmat),fadda(nen,nshc,nmat)
15099 enddo
15100 enddo
15101 endif
15102 endif
15103 endif
15104
15105 end
15106 +DECK,IniLsgvg.
15107 subroutine IniLsgvga
15108
15109 c Initialize the virt. ioniz. photons
15110
15111 implicit none
15112
15113
15114 c include 'volume.inc'
15115 +SEQ,volume.
15116 c include 'lsgvga.inc'
15117 +SEQ,lsgvga.
15118
15119 integer n
15120
15121 do n=1,QSVol
15122 qgvga(n)=0
15123 enddo
15124
15125 end
15126 +DECK,PRILSGVG.
15127 subroutine PriLsgvga
15128
15129 c print the virt. ioniz. photons
15130
15131 implicit none
15132
15133 c include 'GoEvent.inc'
15134 +SEQ,GoEvent.
15135 c include 'volume.inc'
15136 +SEQ,volume.
15137 c include 'lsgvga.inc'
15138 +SEQ,lsgvga.
15139
15140 integer k,i,j
15141
15142 if(soo.eq.0)return
15143
15144 write(oo,*)
15145 write(oo,*)' PriLsgvga: virtual ionization photons'
15146 do k=1,QSVol
15147 write(oo,*)' number of lay =',k
15148 write(oo,*)' qgvga()= ',qgvga(k),' esgvga()=',esgvga(k)
15149 if(qgvga(k).gt.0)then
15150 write(oo,*)' egvga(i,k) ganumat(i,k) ganumshl(i.k)'
15151 write(oo,*)
15152 + ' pntgvga(1,i,k) pntgvga(2,i,k) pntgvga(3,i,k) ',
15153 + ' velgvga(1,i,k) velgvga(2,i,k) velgvga(3,i,k) '
15154 do i=1,qgvga(k)
15155 write(oo,'(1X,e12.5,2(i12))')
15156 + egvga(i,k),ganumat(i,k),ganumshl(i,k)
15157 write(oo,'(6(1X,e12.5))')(pntgvga(j,i,k),j=1,3),
15158 + (velgvga(j,i,k),j=1,3)
15159 enddo
15160 endif
15161 enddo
15162
15163 end
15164 +DECK,Inirga.
15165 subroutine Inirga
15166 c
15167 c Init. common with real photons
15168 c
15169 implicit none
15170
15171 c include 'GoEvent.inc'
15172 +SEQ,GoEvent.
15173 c include 'rga.inc'
15174 +SEQ,rga.
15175
15176 qrga=0
15177 crga=1
15178 sOverflowrga=0
15179 if(nevt.eq.qevt)then
15180 qOverflowrga=0
15181 qsOverflowrga=0
15182 endif
15183
15184
15185 end
15186 +DECK,WORPRIRG.
15187 subroutine WorPrirga
15188
15189 implicit none
15190
15191 c include 'GoEvent.inc'
15192 +SEQ,GoEvent.
15193 c include 'rga.inc'
15194 +SEQ,rga.
15195
15196 c integer i,j
15197
15198 if(nevt.eq.qevt)then
15199
15200 if(qOverflowrga.gt.0)then
15201 write(oo,*)
15202 write(oo,*)' WorPrirga: overflow of real photons arrays '
15203 write(oo,*)' sOverflowrga qsOverflowrga qOverflowrga'
15204 write(oo,*)sOverflowrga,qsOverflowrga,qOverflowrga
15205 endif
15206
15207 endif
15208
15209 end
15210 +DECK,PRIRGA.
15211 subroutine Prirga
15212
15213 c print the real photons
15214
15215 implicit none
15216
15217 c include 'GoEvent.inc'
15218 +SEQ,GoEvent.
15219 c include 'rga.inc'
15220 +SEQ,rga.
15221
15222 integer i,j
15223
15224 if(soo.eq.0)return
15225 write(oo,*)
15226 write(oo,*)' Prirga: real photons'
15227 write(oo,*)' sOverflowrga qsOverflowrga qOverflowrga'
15228 write(oo,*)sOverflowrga,qsOverflowrga,qOverflowrga
15229
15230 write(oo,*)' qrga= ',qrga,' crga=',crga
15231 if(crga.le.qrga)then
15232 write(oo,*)' erga() nVolrga Strga uprga(1) Ptrga'
15233 write(oo,*)
15234 + ' pntrga(1,i) pntrga(2,i) pntrga(3,i) ',
15235 + ' velrga(1,i) velrga(2,i) velrga(3,i) '
15236 do i=crga,qrga
15237 write(oo,'(1X,e12.5,4(1X,I5))')
15238 + erga(i),nVolrga(i),Strga(i),uprga(1,i),Ptrga(i)
15239 write(oo,'(6(1X,e12.5))')(pntrga(j,i),j=1,3),
15240 + (velrga(j,i),j=1,3)
15241 enddo
15242 endif
15243
15244 end
15245 +DECK,PRIRGAF.
15246 subroutine PrirgaF
15247
15248 c print the real photons which fly out
15249
15250 implicit none
15251
15252 c include 'GoEvent.inc'
15253 +SEQ,GoEvent.
15254 c include 'rga.inc'
15255 +SEQ,rga.
15256
15257 integer i,j
15258
15259 if(soo.eq.0)return
15260 write(oo,*)
15261 write(oo,*)' Prirga: real photons which go out'
15262 write(oo,*)' qrga= ',qrga,' crga=',crga
15263 c if(crga.le.qrga)then
15264 write(oo,*)' erga() nVolrga Strga Ptrga'
15265 write(oo,*)
15266 + ' pntrga(1,i) pntrga(2,i) pntrga(3,i) ',
15267 + ' velrga(1,i) velrga(2,i) velrga(3,i) '
15268 do i=1,qrga
15269 if(SFrga(i).eq.1)then
15270 write(oo,'(1X,e12.5,3(1X,I5))')
15271 + erga(i),nVolrga(i),Strga(i),Ptrga(i)
15272 write(oo,'(6(1X,e12.5))')(pntrga(j,i),j=1,3),
15273 + (velrga(j,i),j=1,3)
15274 endif
15275 enddo
15276 c endif
15277
15278 end
15279 +DECK,Iniabs.
15280 subroutine Iniabs
15281 c
15282 c Initialize absorbed photons
15283 c
15284 implicit none
15285
15286 c include 'GoEvent.inc'
15287 +SEQ,GoEvent.
15288 c include 'ener.inc'
15289 +SEQ,ener.
15290 c include 'abs.inc'
15291 +SEQ,abs.
15292
15293 qtagam=0
15294 ctagam=1
15295 sOverflowagam=0
15296 if(nevt.eq.1)then
15297 qOverflowagam=0
15298 qsOverflowagam=0
15299 endif
15300
15301 end
15302 +DECK,WORPRIAB.
15303 subroutine WorPriabs
15304
15305
15306 implicit none
15307
15308 c include 'GoEvent.inc'
15309 +SEQ,GoEvent.
15310 c include 'abs.inc'
15311 +SEQ,abs.
15312
15313 c integer i,j
15314
15315 if(nevt.eq.qevt)then
15316
15317 if(qOverflowagam.gt.0)then
15318 write(oo,*)
15319 write(oo,*)' WorPriabs: overflow of absorbtion photons arrays '
15320 write(oo,*)' sOverflowagam qsOverflowagam qOverflowagam'
15321 write(oo,*)sOverflowagam,qsOverflowagam,qOverflowagam
15322 endif
15323
15324 endif
15325
15326 end
15327 +DECK,PRIABS.
15328 subroutine Priabs
15329
15330 implicit none
15331
15332 c include 'GoEvent.inc'
15333 +SEQ,GoEvent.
15334 c include 'ener.inc'
15335 +SEQ,ener.
15336 c include 'abs.inc'
15337 +SEQ,abs.
15338
15339 integer i,j
15340
15341 if(soo.eq.0)return
15342 write(oo,*)
15343 write(oo,*)' Priabs: virtual photons'
15344 write(oo,*)' sOverflowagam qsOverflowagam qOverflowagam'
15345 write(oo,*)sOverflowagam,qsOverflowagam,qOverflowagam
15346
15347 write(oo,*)' qtagam= ',qtagam,' ctagam=',ctagam
15348 if(ctagam.le.qtagam)then
15349 write(oo,*)' etagam() nVolagam() nAtagam() ',
15350 + 'nShlagam() stagam() upagam()'
15351 write(oo,*)
15352 + ' rtagam(1,i) rtagam(2,i) rtagam(3,i) ',
15353 + ' vtagam(1,i) vtagam(2,i) vtagam(3,i) '
15354 do i=ctagam,qtagam
15355 write(oo,'(1(1X,e12.5),10(1X,i5))')
15356 + etagam(i), nVolagam(i),nAtagam(i),
15357 + nShlagam(i),Stagam(i),(upagam(j,i),j=1,pqup)
15358 write(oo,'(6(1X,e12.5))')(rtagam(j,i),j=1,3),
15359 + (vtagam(j,i),j=1,3)
15360 enddo
15361 endif
15362
15363 end
15364 +DECK,rafflev.
15365 subroutine rafflev
15366 c
15367 c The main subroutine of ionization loss generator
15368 c
15369 implicit none
15370
15371 c include 'ener.inc'
15372 +SEQ,ener.
15373 c include 'atoms.inc'
15374 +SEQ,atoms.
15375 c include 'matters.inc'
15376 +SEQ,matters.
15377 c include 'crosec.inc'
15378 +SEQ,crosec.
15379 c include 'raffle.inc'
15380 +SEQ,raffle.
15381 c include 'volume.inc'
15382 +SEQ,volume.
15383 c include 'track.inc'
15384 +SEQ,track.
15385 c include 'lsgvga.inc'
15386 c include 'GoEvent.inc'
15387 +SEQ,GoEvent.
15388
15389 integer nv,niv,nm
15390 real e
15391
15392 do niv=1,QIVol
15393
15394 nv=numVolIoni(niv)
15395 nm=nMatVol(nv)
15396
15397 if(sign_ang.eq.0)then
15398
15399 call raffle(nm,real(wide(nv)),e)
15400 call rafflevirt(nv,niv)
15401
15402 else
15403
15404 c if(sigmtk.eq.0)then
15405 c call raffle(nm,real(wide(nv)/e3ang(3)),e)
15406 c call rafflevirt1(nv,niv)
15407 c else
15408 call raffle(nm,real(vlenmtk(nv)),e)
15409 call rafflevirt2(nv,niv)
15410 c endif
15411
15412 endif
15413
15414
15415 enddo
15416
15417 end
15418 +DECK,RAFFLEVI.
15419 subroutine rafflevirt(nv,niv)
15420
15421 implicit none
15422
15423 integer nv,niv
15424
15425 c include 'GoEvent.inc'
15426 +SEQ,GoEvent.
15427 c include 'ener.inc'
15428 +SEQ,ener.
15429 c include 'atoms.inc'
15430 +SEQ,atoms.
15431 c include 'matters.inc'
15432 +SEQ,matters.
15433 c include 'crosec.inc'
15434 +SEQ,crosec.
15435 c include 'raffle.inc'
15436 +SEQ,raffle.
15437 c include 'volume.inc'
15438 +SEQ,volume.
15439 c include 'lsgvga.inc'
15440 +SEQ,lsgvga.
15441 c include 'abs.inc'
15442 +SEQ,abs.
15443
15444 integer i,j
15445 real ranfl
15446 real F,rr
15447
15448 esgvga(niv)=ESGRaf
15449 do i=1,QGRaf
15450 egvga(i,niv)=EGRaf(i)
15451 pntraf(1,i)=0.0
15452 pntraf(2,i)=0.0
15453 rr=ranfl()
15454 pntraf(3,i)=wall1(nv)+rr*wide(nv)
15455 F=3.14159*2.0*ranfl()
15456 velraf(1,i)=cos(F)
15457 velraf(2,i)=sin(F)
15458 velraf(3,i)=0.0
15459 if(i.le.pqgvga)then
15460 egvga(i,niv)=EGRaf(i)
15461 do j=1,3
15462 pntgvga(j,i,niv)=pntraf(j,i)
15463 velgvga(j,i,niv)=velraf(j,i)
15464 enddo
15465 ganumat(i,niv)=NAtGRaf(i)
15466 ganumshl(i,niv)=NShAtGRaf(i)
15467 endif
15468
15469 if(qtagam .eq. pqtagam)then
15470 qOverflowagam=qOverflowagam+1
15471 if(sOverflowagam.eq.0)then
15472 qsOverflowagam=qsOverflowagam+1
15473 sOverflowagam=1
15474 endif
15475 else
15476 qtagam=qtagam+1
15477 etagam(qtagam)=EGRaf(i)
15478 do j=1,3
15479 rtagam(j,qtagam)=pntraf(j,i)
15480 vtagam(j,qtagam)=velraf(j,i)
15481 enddo
15482 nVolagam(qtagam)=nv
15483 nAtagam(qtagam)=NAtGRaf(i)
15484 nShlagam(qtagam)=NShAtGRaf(i)
15485 Stagam(qtagam)=1
15486 endif
15487 enddo
15488
15489 end
15490 +DECK,RAFFLEV2.
15491 subroutine rafflevirt2(nv,niv)
15492
15493 implicit none
15494
15495 integer nv,niv
15496
15497 c include 'GoEvent.inc'
15498 +SEQ,GoEvent.
15499 c include 'ener.inc'
15500 +SEQ,ener.
15501 c include 'atoms.inc'
15502 +SEQ,atoms.
15503 c include 'matters.inc'
15504 +SEQ,matters.
15505 c include 'crosec.inc'
15506 +SEQ,crosec.
15507 c include 'raffle.inc'
15508 +SEQ,raffle.
15509 c include 'volume.inc'
15510 +SEQ,volume.
15511 c include 'track.inc'
15512 +SEQ,track.
15513 c include 'lsgvga.inc'
15514 +SEQ,lsgvga.
15515 c include 'abs.inc'
15516 +SEQ,abs.
15517
15518 integer i,j,nmt,nmta
15519 real ranfl
15520 real*8 rr
15521 real*8 rrr
15522
15523 esgvga(niv)=ESGRaf
15524 if(QGRaf.le.pqgvga)then
15525 qgvga(niv)=QGRaf
15526 else
15527 qgvga(niv)=pqgvga
15528 endif
15529 do i=1,QGRaf
15530 rr=ranfl()
15531 rr=rr*vlenmtk(nv)
15532 rrr=rr
15533 do nmt=nmtkvol1(nv),nmtkvol2(nv)
15534 if(rrr.le.lenmtk(nmt))then
15535 do j=1,3
15536 pntraf(j,i)=pntmtk(j,nmt)+rrr*velmtk(j,nmt)
15537 enddo
15538 nmta=nmt
15539 go to 10
15540 else
15541 rrr=rrr-lenmtk(nmt)
15542 endif
15543 enddo
15544 write(oo,*)' worning in rafflevirt2: strange step'
15545 nmta=nmtkvol2(nv)
15546 do j=1,3
15547 pntraf(j,i)=pntmtk(j,nmta)+
15548 + vlenmtk(nv)*velmtk(j,nmta)
15549 enddo
15550
15551 10 continue
15552
15553 call Ncirclesim(
15554 + e1mtk(1,nmta),e2mtk(1,nmta),e3mtk(1,nmta),
15555 + velraf(1,i))
15556
15557 if(i.le.pqgvga)then
15558 egvga(i,niv)=EGRaf(i)
15559 do j=1,3
15560 pntgvga(j,i,niv)=pntraf(j,i)
15561 velgvga(j,i,niv)=velraf(j,i)
15562 enddo
15563 ganumat(i,niv)=NAtGRaf(i)
15564 ganumshl(i,niv)=NShAtGRaf(i)
15565 endif
15566
15567 c write(oo,*)' rafflevirt1:'
15568 c write(oo,*)(rst(j),j=1,3)
15569 c write(oo,*)(wid(j),j=1,3)
15570 c write(oo,*)(pntgvga(j,i,nsv),j=1,3)
15571 c write(oo,*)(vel(j),j=1,3)
15572 c write(oo,*)(velgvga(j,i,nsv),j=1,3)
15573 c ganumat(i,niv)=NAtGRaf(i)
15574 c ganumshl(i,niv)=NShAtGRaf(i)
15575
15576 if(qtagam .eq. pqtagam)then
15577 qOverflowagam=qOverflowagam+1
15578 if(sOverflowagam.eq.0)then
15579 qsOverflowagam=qsOverflowagam+1
15580 sOverflowagam=1
15581 endif
15582 else
15583 qtagam=qtagam+1
15584 etagam(qtagam)=EGRaf(i)
15585 do j=1,3
15586 rtagam(j,qtagam)=pntraf(j,i)
15587 vtagam(j,qtagam)=velraf(j,i)
15588 enddo
15589 nVolagam(qtagam)=nv
15590 nAtagam(qtagam)=NAtGRaf(i)
15591 nShlagam(qtagam)=NShAtGRaf(i)
15592 Stagam(qtagam)=1
15593 endif
15594 enddo !i=1,QGRaf
15595
15596 end
15597 +DECK,RAFFLE.
15598 subroutine raffle(nm,x,e)
15599
15600 implicit none
15601
15602 c include 'GoEvent.inc'
15603 +SEQ,GoEvent.
15604 c include 'ener.inc'
15605 +SEQ,ener.
15606 c include 'atoms.inc'
15607 +SEQ,atoms.
15608 c include 'matters.inc'
15609 +SEQ,matters.
15610 c include 'crosec.inc'
15611 +SEQ,crosec.
15612 c include 'raffle.inc'
15613 +SEQ,raffle.
15614
15615 integer nm
15616 real x
15617 real e
15618
15619
15620 integer nshc,n,ierror
15621 real eran
15622 real xran,dran
15623 integer iran
15624 integer rquan
15625
15626 QGRaf=0
15627 e=0.0
15628
15629 do nshc=1,QShellC(nm)
15630
15631 call lspois(quan(nshc,nm)*x,rquan,ierror)
15632 if(ierror.ne.0)then
15633 write(oo,*)' error in raffle: lspois returned ',
15634 + 'sign of error,'
15635 write(oo,*)' quan(nshc,nm)*x=',quan(nshc,nm)*x
15636 write(oo,*)' quan(nshc,nm)=',quan(nshc,nm)
15637 write(oo,*)' x=',x
15638 write(oo,*)' nshc=',nshc,' nm=',nm
15639 stop 'error in poisson'
15640 endif
15641
15642 do n=1,rquan
15643
15644 if(QGRaf.eq.pQGRaf)then
15645 write(oo,*)' Worning og raffle: too much ',
15646 + ' photons: QGRaf=',QGRaf
15647 write(oo,*)' other wiil be ignored'
15648 go to 10
15649 endif
15650
15651 QGRaf=QGRaf+1
15652
15653
15654 call lhisran(fadda(1,nshc,nm),qener,1.0,1.0,xran)
15655
15656 iran=xran
15657 if(iran.lt.1.or.iran.gt.qener)then
15658 write(oo,*)' Worning of raffle: iran=',iran,
15659 + ' xran=',xran
15660 if(iran.lt.1)then
15661 iran=1
15662 else
15663 iran=qener
15664 endif
15665 endif
15666 dran=xran-iran
15667 eran=ener(iran)+(ener(iran+1)-ener(iran))*dran
15668 c if(nshc.eq.1)then
15669 c write(oo,*)' xran,iran,dran=',xran,iran,dran
15670 c write(oo,*)' ener(iran),ener(iran+1),eran=',
15671 c + ener(iran),ener(iran+1),eran
15672 c endif
15673 e=e+eran
15674 EGRaf(QGRaf)=eran
15675 NAtGRaf(QGRaf)=NAtAC(nshc,nm)
15676 NShAtGRaf(QGRaf)=NSheC(nshc,nm)
15677
15678 enddo
15679
15680 enddo
15681
15682 10 continue
15683
15684 ESGraf=e
15685
15686 end
15687 +DECK,PRIRAFFL.
15688 subroutine PriRaffle
15689
15690 c print the virt. ioniz. photons
15691
15692 implicit none
15693
15694 c include 'GoEvent.inc'
15695 +SEQ,GoEvent.
15696 c include 'raffle.inc'
15697 +SEQ,raffle.
15698
15699 integer i
15700
15701 if(soo.eq.0)return
15702 write(oo,*)
15703 write(oo,*)' PriRaffle: virt. ioniz. photons'
15704 write(oo,*)' QGRaf= ',QGRaf,' ESGRaf=',ESGRaf
15705 if(QGRaf.gt.0)then
15706 write(oo,*)' EGRaf(i) NAtGRaf(i) NShAtGRaf(i)'
15707 do i=1,QGRaf
15708 write(oo,'(1X,e12.5,2(i12))')
15709 + EGRaf(i), NAtGRaf(i), NShAtGRaf(i)
15710 enddo
15711 endif
15712
15713 end
15714 +DECK,GoGam.
15715 subroutine GOGam
15716
15717 c make absorption of the real photon
15718 c and pass it to the virt photon
15719
15720 implicit none
15721
15722 c include 'GoEvent.inc'
15723 +SEQ,GoEvent.
15724 c include 'abs.inc'
15725 +SEQ,abs.
15726 c include 'rga.inc'
15727 +SEQ,rga.
15728 integer i,j
15729 integer isabs,nmat,nmshl
15730 c real*8 curpnt(3)
15731 c real dnst
15732 integer num
15733
15734 do i=crga,qrga
15735 c do j=1,3
15736 c curpnt(j)=pntrga(j,i)
15737 c enddo
15738 num=nVolrga(i)
15739 call lsta_abs1
15740 + (erga(i),i,pntrga(1,i),velrga(1,i),num,
15741 + isabs,nmat,nmshl)
15742 if(isabs.eq.1)then
15743 if(qtagam .eq. pqtagam)then
15744 qOverflowagam=qOverflowagam+1
15745 if(sOverflowagam.eq.0)then
15746 qsOverflowagam=qsOverflowagam+1
15747 sOverflowagam=1
15748 endif
15749 else
15750 qtagam=qtagam+1
15751 etagam(qtagam)=erga(i)
15752 do j=1,3
15753 c rtagam(j,qtagam)=curpnt(j)
15754 rtagam(j,qtagam)=pntrga(j,i)
15755 vtagam(j,qtagam)=velrga(j,i)
15756 enddo
15757 nVolagam(qtagam)=num
15758 nAtagam(qtagam)=nmat
15759 nShlagam(qtagam)=nmshl
15760 Stagam(qtagam)=Strga(i)
15761 c densi(qtagam)=dnst
15762 endif
15763 else
15764 SFrga(i)=1
15765 endif
15766 enddo
15767 crga=qrga+1
15768 end
15769 +DECK,LSTAABS1.
15770 subroutine lsta_abs1(eg,nrga,curpnt,veloc,num,isabs,nmat,nmshl)
15771
15772 c make step to end of matter or to absorption point
15773 c curpnt - current point of photon
15774 c veloc - cosine
15775 c num - number of volume
15776 c isabs - sign of absorbtion
15777
15778 implicit none
15779
15780 c include 'GoEvent.inc'
15781 +SEQ,GoEvent.
15782 c include 'abs.inc'
15783 +SEQ,abs.
15784
15785 real eg,veloc(3)
15786 real*8 curpnt(3)
15787 integer num
15788 integer nrga,isabs,nmat,nmshl
15789 c real dnst
15790 integer i
15791 real*8 mleng,xleng
15792
15793
15794 do i=1,1000 ! number of mat is about 10
15795
15796 isabs=0
15797 if(i.eq.1.and.num.ne.0)goto 10
15798 call VolNumZcoor(curpnt(3),veloc(3),num)
15799 10 if(num.eq.0)return
15800 call VolPathLeng(curpnt(3),veloc,num,mleng)
15801 c write(oo,*)' num=',num,' mleng=',mleng
15802 call lsta_abs(eg,nrga,num,mleng,isabs,xleng,nmat,nmshl)
15803 curpnt(1)=curpnt(1)+xleng*veloc(1)
15804 curpnt(2)=curpnt(2)+xleng*veloc(2)
15805 curpnt(3)=curpnt(3)+xleng*veloc(3)
15806
15807 if(isabs.eq.1)return
15808
15809 enddo
15810
15811 end
15812
15813
15814
15815 subroutine lsta_abs(eg,nrga,nvol,mleng,
15816 + isabs,xleng,nm_at,nmshl)
15817
15818 c Raffle the absorbtion in volume number nvol
15819 c eg - energy of the photon
15820 c isabs - sign of absorbtion
15821 c xleng - coord of point of absorbtion
15822 c nm_at and nmshl - numbes of the atom and the shell
15823 implicit none
15824
15825 c include 'GoEvent.inc'
15826 +SEQ,GoEvent.
15827 c include 'ener.inc'
15828 +SEQ,ener.
15829 c include 'atoms.inc'
15830 +SEQ,atoms.
15831 c include 'matters.inc'
15832 +SEQ,matters.
15833 c include 'volume.inc'
15834 +SEQ,volume.
15835 c include 'rga.inc'
15836 +SEQ,rga.
15837 c include 'shl.inc'
15838 +SEQ,shl.
15839
15840 real eg
15841 real*8 xleng,mleng
15842 integer nrga,nvol,isabs,nm_at,nmshl
15843 integer nmat
15844 c real dnst
15845 real rrr(100)
15846 integer iarrr(100),isrrr(100)
15847 integer ia,is
15848 real r,s
15849 real ranfl
15850 integer i,j,k
15851 c integer n
15852 real thr
15853 integer iatm,natm
15854
15855 nmat=nMatVol(nvol)
15856
15857 if(nmat.eq.0)then
15858 isabs=0
15859 xleng=mleng
15860 return
15861 endif
15862
15863 r=ranfl()
15864 if(r.gt.0.99999)then
15865 isabs=0
15866 xleng=mleng
15867 return
15868 endif
15869 j=qener+1
15870 do i=2,qener+1
15871 if(eg.lt.ener(i))then
15872 j=i-1
15873 go to 10
15874 endif
15875 enddo
15876 if(j.eq.qener+1)then
15877 isabs=0
15878 xleng=mleng
15879 return
15880 endif
15881 10 k=0
15882 s=0
15883 do ia=1,QAtMat(nmat)
15884 do iatm=1,qatm
15885 if(Zat(AtMat(ia,nmat)).eq.charge(iatm))then
15886 natm=iatm
15887 go to 15
15888 endif
15889 enddo
15890 natm=0
15891 15 do is=1,QShellAt(AtMat(ia,nmat))
15892 c write(oo,*)
15893 c + ' ia,AtMat(ia,nmat),is,ThresholdAt(is,AtMat(ia,nmat))='
15894 c write(oo,*)
15895 c + ia,AtMat(ia,nmat),is,ThresholdAt(is,AtMat(ia,nmat))
15896 if(natm.eq.0)then
15897 thr=ThresholdAt(is,AtMat(ia,nmat))
15898 else
15899 thr=eshell(natm,is)
15900 endif
15901 if(eg.gt.thr)then
15902 k=k+1
15903 rrr(k)=PhotAt(j,is,AtMat(ia,nmat))
15904 + *WeightAtMat(ia,nmat)
15905
15906 iarrr(k)=ia
15907 isrrr(k)=is
15908 s=s+rrr(k)
15909 c write(oo,*)' PhotAt(j,is,AtMat(ia,nmat))=',
15910 c + PhotAt(j,is,AtMat(ia,nmat))
15911 c write(oo,*)' WeightAtMat(ia,nmat)=',
15912 c + WeightAtMat(ia,nmat)
15913 c write(oo,*)' s=',s
15914 endif
15915 enddo
15916 enddo
15917 c write(oo,*)(rrr(i),i=1,3)
15918 if(k.eq.0)then
15919 isabs=0
15920 xleng=mleng
15921 return
15922 endif
15923 s=s* ElDensMat(nmat)/Z_Mean(nmat) *5.07E10
15924 xleng=-alog(1.0-r)/s
15925
15926 c write(oo,*)' xleng=',xleng,' r=',r,' j=',j,' nmat=',nmat
15927 c write(oo,*)' k=',k,' eg=',eg,' s=',s
15928 if(xleng.gt.mleng)then
15929 isabs=0
15930 xleng=mleng
15931 else
15932 isabs=1
15933 c r=ranfl()
15934 call lhispre(rrr,k)
15935 c write(oo,*)(rrr(i),i=1,3)
15936 call lhisran(rrr,k,1.0,1.0,r)
15937 c write(oo,*)' r=',r
15938 i=r
15939 if(i.lt.1) i=1
15940 if(i.gt.k)i=k
15941 nm_at=AtMat(iarrr(i),nmat)
15942 nmshl=isrrr(i)
15943 c write(oo,*)' i=',i
15944
15945 c write(oo,*)' nm_at=',nm_at,' nmshl=',nmshl
15946 c dnst=densit(nmat)
15947
15948 endif
15949
15950 end
15951
15952 +DECK,AbsGam.
15953
15954
15955
15956 subroutine AbsGam
15957
15958 c make absorption in the knowing point
15959 c of the all photons in the abs.inc
15960 c All of them are transferred to the real photons rga.inc
15961 c and to the delta electrons del.inc
15962 implicit none
15963
15964 c include 'GoEvent.inc'
15965 +SEQ,GoEvent.
15966 c include 'abs.inc'
15967 +SEQ,abs.
15968
15969 c real eg,veloc(3),abspnt(3)
15970 c integer numat,numshl
15971 integer i
15972 do i=ctagam,100000
15973 if(i.gt.qtagam)go to 10
15974 call lsta_abs3
15975 + (i,etagam(i),rtagam(1,i),vtagam(1,i),
15976 + nVolagam(i),nAtagam(i),nShlagam(i),Stagam(i),upagam(1,i))
15977
15978 enddo
15979 10 ctagam=qtagam+1
15980 end
15981
15982
15983
15984 subroutine lsta_abs3(iagam,eg,abspnt,veloc,
15985 + nVolagam,nAtagam,nShlagam,Stagam,upagam)
15986
15987 c make absorption in the knowing point
15988 c and generate secondaries photons and delta electrons
15989 c eg - enegy of photon
15990 c abspnt - point of absorbtion
15991 c nVolagam - number of matter
15992 c nAtagam - number of atom
15993 c nShlagam - number of shell
15994 c Stagam - sign of source of this photon
15995 c veloc - direction of veloc.
15996
15997 implicit none
15998
15999 c include 'GoEvent.inc'
16000 +SEQ,GoEvent.
16001 c include 'rga.inc'
16002 +SEQ,rga.
16003 c include 'del.inc'
16004 +SEQ,del.
16005 c include 'shl.inc'
16006 +SEQ,shl.
16007
16008 integer iagam
16009 real eg,veloc(3)
16010 real*8 abspnt(3)
16011 integer nVolagam,nAtagam,nShlagam,Stagam,upagam(pqup)
16012 real eedel(pqsel),velocdel(3,pqsel)
16013 real eedga(pqsga),velocdga(3,pqsga)
16014 integer nndel,nndga
16015
16016 integer i,j
16017 real s
16018
16019 call lsta_abs2(eg,abspnt,veloc,nVolagam,nAtagam,nShlagam,
16020 + nndel,eedel,velocdel,nndga,eedga,velocdga)
16021
16022 if(nndga.gt.0.and.Stagam.eq.9999)then
16023 write(oo,*)' Worning of lsta_abs3:'
16024 write(oo,*)' too many generetion of secondary ',
16025 + ' photons, Stagam=',Stagam,' nndga=',nndga
16026 write(oo,*)' Others will be ignored'
16027 go to 10
16028 endif
16029
16030 s=0.0
16031 do i=1,nndel
16032 s=s+eedel(i)
16033 enddo
16034 do i=1,nndga
16035 s=s+eedga(i)
16036 enddo
16037 c if(s.gt.eg)then
16038 if( (s-eg) .gt. 1.0e-6 * (s+eg) )then
16039 write(oo,*)'worning of lsta_abs3:',
16040 + ' break of energy preservation'
16041 write(oo,*)' eg=',eg,' s=',s
16042 write(oo,*)' nAtagam=',nAtagam,' nShlagam',nShlagam
16043 write(oo,*)' nndel=',nndel
16044 do i=1,nndel
16045 write(oo,*)' eedel(i)=',eedel(i)
16046 enddo
16047 do i=1,nndga
16048 write(oo,*)' eedga(i)=',eedga(i)
16049 enddo
16050 endif
16051
16052
16053 do i=1,nndga
16054
16055 if(qrga .eq. pqrga)then
16056 qOverflowrga=qOverflowrga+1
16057 if(sOverflowrga.eq.0)then
16058 qsOverflowrga=qsOverflowrga+1
16059 sOverflowrga=1
16060 endif
16061 else
16062
16063 qrga=qrga+1
16064
16065 c if(qrga.eq.pqrga)then
16066 c write(oo,*)' wroning lsta_abs3:',
16067 c + ' too much of real photons'
16068 c write(oo,*)' other will be ignored'
16069 c go to 10
16070 c endif
16071
16072 Strga(qrga)=Stagam+1
16073 Ptrga(qrga)=iagam
16074 do j=1,pqup
16075 uprga(j,qrga)=upagam(j)
16076 enddo
16077 SFrga(qrga)=0
16078 do j=1,3
16079 pntrga(j,qrga)=abspnt(j)
16080 enddo
16081 do j=1,3
16082 velrga(j,qrga)=velocdga(j,i)
16083 enddo
16084 erga(qrga)=eedga(i)
16085 nVolrga(qrga)=nVolagam
16086 endif
16087 enddo
16088 10 continue
16089 c write(oo,*)' nndel=',nndel
16090 do i=1,nndel
16091 if(qdel .eq. pqdel)then
16092 qOverflowDel=qOverflowDel+1
16093 if(sOverflowDel.eq.0)then
16094 qsOverflowDel=qsOverflowDel+1
16095 sOverflowDel=1
16096 endif
16097 else
16098
16099 c if(qdel.eq.pqdel)then
16100 c write(oo,*)' wroning lsta_abs3:',
16101 c + ' too much of delta electr.'
16102 c write(oo,*)' other will not be taken into account'
16103 c go to 20
16104 c endif
16105 qdel=qdel+1
16106 Stdel(qdel)=Stagam
16107 Ptdel(qdel)=iagam
16108 do j=1,pqup
16109 updel(j,qdel)=upagam(j)
16110 enddo
16111 if(i.eq.1)then
16112 SOdel(qdel)=0
16113 else
16114 SOdel(qdel)=1
16115 endif
16116 do j=1,3
16117 pntdel(j,qdel)=abspnt(j)
16118 enddo
16119 do j=1,3
16120 veldel(j,qdel)=velocdel(j,i)
16121 enddo
16122 edel(qdel)=eedel(i)
16123 nVoldel(qdel)=nVolagam
16124 rangepdel(qdel)=0.0
16125 rangedel(qdel)=0.0
16126 endif
16127 enddo
16128
16129
16130
16131 20 end
16132
16133
16134
16135
16136
16137 subroutine lsta_abs2(eg,abspnt,veloc,nVolagam,nAtagam,nShlagam,
16138 + nndel,eedel,velocdel,nndga,eedga,velocdga)
16139
16140
16141 c make absorption in the knowing point
16142 c and generate secondaries photons and delta electrons
16143 c eg - enegy of photon
16144 c abspnt - point of absorbtion
16145 c veloc - direction of veloc.
16146 c nVolagam - number of matter
16147 c nAtagam - number of atom
16148 c nShlagam - number of shell
16149 c output:
16150 c nndel - quantity of delta-electrons
16151 c eedel - enegies of the delta-electrons
16152 c velocdel - enegies of the delta-electrons
16153 c nndga,eedga,velocdga - the same for secondary photons
16154
16155 implicit none
16156
16157 c include 'shl.inc'
16158 +SEQ,shl.
16159 c include 'ener.inc'
16160 +SEQ,ener.
16161 c include 'atoms.inc'
16162 +SEQ,atoms.
16163
16164 real eg,veloc(3)
16165 real*8 abspnt(3)
16166 integer nVolagam,nAtagam,nShlagam
16167 real eedel(pqsel),velocdel(3,pqsel)
16168 real eedga(pqsga),velocdga(3,pqsga)
16169 integer nndel,nndga
16170
16171 integer num
16172 integer numat,numshl
16173 integer i,j
16174 real r
16175 real hdist
16176
16177 real ranfl
16178
16179 hdist=0.0
16180 c if(numat.lt.0.or.numat.gt.qatm)then
16181 c stop 'wrong numat'
16182 c endif
16183 c if(numat.gt.0)then
16184 c if(numshl.lt.1.or.numshl.gt.qshl(numat))then
16185 c stop 'wrong numshl'
16186 c endif
16187 c endif
16188
16189
16190 num=0
16191 c call lsta_fmat(abspnt(3),veloc(3),num)
16192 nndel=0
16193 nndga=0
16194 c write(oo,*)' num=',num
16195 if(nVolagam.eq.0)then
16196 return
16197 endif
16198
16199 nndel=1
16200 do i=1,3
16201 velocdel(i,nndel)=veloc(i)
16202 enddo
16203 do i=1,qatm
16204 c write(oo,*)' Zat(nAtagam)',Zat(nAtagam)
16205 c write(oo,*)' charge(i)',charge(i)
16206 if(Zat(nAtagam).eq.charge(i))then
16207 numat=i
16208 go to 5
16209 endif
16210 enddo
16211 c The place of question
16212 c Several lines was commented
16213 eedel(nndel)=eg-ThresholdAt(nShlagam,nAtagam)
16214 if(eedel(nndel).le.0.0)then
16215 hdist=-eedel(nndel)
16216 eedel(nndel)=0.0
16217 endif
16218 c
16219 c write(oo,*)' nShlagam=',nShlagam,
16220 c + ' QShellAt(nAtagam)=',QShellAt(nAtagam)
16221 if(nShlagam.lt.QShellAt(nAtagam))then
16222 nndel=nndel+1
16223 eedel(nndel)=ThresholdAt(nShlagam,nAtagam)-hdist-
16224 + 2.0*ThresholdAt(QShellAt(nAtagam),nAtagam)
16225 c eedel(nndel)=ThresholdAt(nShlagam,nAtagam)-hdist
16226 if(eedel(nndel).le.0.0)then
16227 nndel=nndel-1
16228 goto 2
16229 endif
16230 call sfersim(velocdel(1,nndel))
16231 endif
16232 2 continue
16233 return
16234
16235 5 continue
16236
16237 c asumed that the last shell is zero energy or 1 eV
16238 c if(nAtagam.ne.0)then
16239 eedel(nndel)=eg-eshell(nShlagam,numat)
16240 c write(oo,*)' eg=',eg,' nShlagam=',nShlagam,' numat=',numat
16241 c write(oo,*)' eedel(nndel)=',eedel(nndel)
16242 c else
16243 c eedel(nndel)=eg-20.0e-6 !avarege energy of last shell
16244 c endif
16245
16246 if(eedel(nndel).le.0.0)then
16247 hdist=-eedel(nndel)
16248 eedel(nndel)=0.0
16249 endif
16250
16251 c if(numat.gt.0)then
16252 numshl=nShlagam
16253 if(qschl(numshl,numat).gt.0)then
16254
16255
16256 r=ranfl()
16257 j=qschl(numshl,numat)
16258
16259 if(j.gt.0)then
16260 j=qschl(numshl,numat)
16261 do i=1, qschl(numshl,numat)
16262 if(r.lt.secprobch(i,numshl,numat))then
16263 j=i
16264 go to 10
16265 endif
16266 enddo
16267 10 continue
16268 c write(oo,*)' prob: r=',r,' j=',j
16269
16270 do i=1,qsel(j,numshl,numat)
16271 nndel=nndel+1
16272 eedel(nndel)=secenel(i,j,numshl,numat)
16273 + -hdist
16274 if(eedel(nndel).lt.0)then
16275 hdist=-eedel(nndel)
16276 eedel(nndel)=0.0
16277 else
16278 hdist=0.0
16279 endif
16280 call sfersim(velocdel(1,nndel))
16281 enddo
16282 do i=1,qsga(j,numshl,numat)
16283 nndga=nndga+1
16284 eedga(nndga)=secenga(i,j,numshl,numat)
16285 + -hdist
16286 if(eedga(nndga).lt.0)then
16287 hdist=-eedga(nndga)
16288 eedga(nndga)=0.0
16289 else
16290 hdist=0.0
16291 endif
16292 call sfersim(velocdga(1,nndga))
16293 enddo
16294
16295 endif
16296 else
16297 if(nShlagam.lt.QShellAt(nAtagam))then
16298 nndel=nndel+1
16299 eedel(nndel)=eshell(nShlagam,numat)-hdist-
16300 + 2.0*eshell(qshl(numat),numat)
16301 if(eedel(nndel).le.0.0)then
16302 nndel=nndel-1
16303 goto 20
16304 endif
16305 call sfersim(velocdel(1,nndel))
16306 endif
16307 20 continue
16308
16309 endif
16310
16311 c endif
16312
16313 end
16314 +DECK,IniBdel5.
16315
16316
16317 c
16318 c Package for tracing of delta-electrons.
16319 c
16320
16321
16322 subroutine InisBdel
16323
16324 c
16325 c This is routine for standart initialization.
16326 c It is strictly recommended.
16327 c
16328 c call IniBdel(1,0.0001, 0.00005*4.0e-3, 0.1)
16329 call IniBdel(2,0.0001, 0.001*4.0e-3, 0.1)
16330
16331 end
16332
16333
16334 subroutine IniBdel(psruthBdel,peMinBdel,pmlamBdel,pmTetacBdel)
16335 c
16336 c Initialization of the delta-eleectron tracing package
16337 c
16338 implicit none
16339
16340 c include 'GoEvent.inc'
16341 +SEQ,GoEvent.
16342 c include 'ener.inc'
16343 +SEQ,ener.
16344 c include 'atoms.inc'
16345 +SEQ,atoms.
16346 c include 'matters.inc'
16347 +SEQ,matters.
16348 c include 'crosec.inc'
16349 +SEQ,crosec.
16350 c include 'volume.inc'
16351 +SEQ,volume.
16352 c include 'bdel.inc'
16353 +SEQ,bdel.
16354 c include 'cconst.inc'
16355 +SEQ,cconst.
16356
16357 integer psruthBdel
16358 real peMinBdel,pmlamBdel,pmTetacBdel
16359 integer n,nm,na,na1,nen
16360 real dedx1,sde,sde2
16361 c real dedx,dedx2
16362 real rms,rm(pQAt),adens
16363 real mT,A
16364 real*8 B,r
16365 real msig,x
16366 integer sienred
16367 real rr,ek,cor
16368 real fcalcsCBdel
16369 c real s
16370 integer nang
16371 integer nprev, nnext, qempt
16372 integer nempt(pqAt),nqe
16373 real*8 k,c
16374 real*8 f1,f2,z1,z2
16375 integer nam
16376 real*8 sd,st,st1
16377 integer n1,n2,nener
16378
16379
16380 sruthBdel=psruthBdel
16381 eMinBdel=peMinBdel
16382 mlamBdel=pmlamBdel
16383 mTetacBdel=pmTetacBdel
16384 if(eMinBdel.lt.ener(1))then
16385 write(oo,*)' eMinBdel is too small, eMinBdel=',eMinBdel
16386 stop
16387 endif
16388 c do n=2,qener
16389 c if(eMinBdel.lt.ener(n))then
16390 c iMinBdel=n-1
16391 c go to 10
16392 c endif
16393 c enddo
16394 c write(oo,*)' worning: eMinBdel is too hige, eMinBdel=',eMinBdel
16395 c iMinBdel=qener+1
16396 c10 continue
16397 do n=1,3
16398 e1Bdel(n)=0.0
16399 e2Bdel(n)=0.0
16400 e3Bdel(n)=0.0
16401 enddo
16402 sturnBdel=0.0
16403 do nm=1,pQMat
16404 do nen=1,qener
16405 TetacBdel(nen,nm)=0.0
16406 enddo
16407 enddo
16408 TetaBdel=0.0
16409 c do n=iMinBdel,qener
16410 c call IniPart(enerc(n),0.511)
16411 c call IniCrosec
16412 do nm=1,pQMat
16413 if(qAtMat(nm).gt.0)then
16414 c if(sMatC(nm).gt.0)then
16415 rms=0.0
16416 do na=1,QAtMat(nm)
16417 rms=rms+Aat(AtMat(na,nm))*WeightAtMat(na,nm)
16418 enddo
16419 do na=1,QAtMat(nm)
16420 rm(na)=Aat(AtMat(na,nm))*WeightAtMat(na,nm)/rms
16421 enddo
16422 sienred=0
16423 do n=qener+1,1,-1
16424 if(sienred.eq.0)then
16425 sde=0.0
16426 sde2=0.0
16427 do na=1,QAtMat(nm)
16428 adens=DensMat(nm)*rm(na)
16429 c write(oo,*)' adens=',adens
16430 * call lsrelp(
16431 * + Aat(AtMat(na,nm)),float(Zat(AtMat(na,nm))),adens,
16432 * + 2000.0*ener(n)/1000.0,dedx)
16433 * if(dedx.lt.0.0)dedx=0.0
16434
16435 * call lsrelm(
16436 * + Aat(AtMat(na,nm)),float(Zat(AtMat(na,nm))),adens,
16437 * + 105.65/0.511*ener(n)/1000.0,dedx2)
16438 * if(dedx2.lt.0.0)dedx2=0.0
16439
16440 * sde=sde+dedx*adens
16441 * sde2=sde2+dedx2*adens
16442
16443 enddo
16444 * sde=sde*1000.0
16445 * sde2=sde2*1000.0
16446
16447
16448 c call lsrelp(
16449 c + A_Mean(nm),Z_Mean(nm),DensMat(nm),
16450 c + 2000.0*enerc(n)/1000.0,dedx)
16451 c dedx=dedx*DensMat(nm)*1000.0
16452 c eLossBdel(n,nm)=sde
16453 call lstREL1(ener(n)/1000.0, -1.0, nm, dedx1)
16454 dedx1=dedx1*1000.0
16455 eLossBdel(n,nm)=dedx1
16456 c write(oo,*)' n=',n,' nm=',nm,' ener(n)=',ener(n)
16457 c write(oo,*)' sde=',sde,
16458 c + ' dedx1=',dedx1 ,' sde2=',sde2
16459 if(n.lt.qener)then
16460 if(eLossBdel(n,nm).lt.0.5*eLossBdel(n+1,nm))then
16461 sienred=1
16462 eLossBdel(n,nm)=0.5*eLossBdel(n+1,nm)
16463 endif
16464 endif
16465 else
16466 eLossBdel(n,nm)=eLossBdel(n+1,nm)
16467 endif
16468 enddo
16469 c endif
16470 endif
16471 enddo
16472 c stop
16473
16474 do nen=1,qener
16475 beta2Bdel(nen)=
16476 + (2.0*ELMAS*enerc(nen) + enerc(nen)*enerc(nen)) /
16477 + ((ELMAS + enerc(nen)) * (ELMAS + enerc(nen)))
16478 betaBdel(nen) = sqrt(beta2Bdel(nen))
16479 momentum2Bdel(nen)= enerc(nen)*enerc(nen) + 2.0*ELMAS*enerc(nen)
16480 momentumBdel(nen) = sqrt(momentum2Bdel(nen))
16481 enddo
16482
16483 if(sruthBdel.ne.2)then
16484
16485 do nm=1,pQMat
16486 if(qAtMat(nm).gt.0)then
16487 do nen=1,qener
16488
16489 ek=enerc(nen)*1000.0
16490 if(ek.le.10.0)then
16491 rr=1.0e-3 * A_Mean(nm)/Z_Mean(nm) * 3.872e-3 * ek ** 1.492
16492 rr=rr/DensMat(nm)
16493 else
16494 rr=1.0e-3 * 6.97e-3 * ek ** 1.6
16495 rr=rr/DensMat(nm)
16496 endif
16497 rr=rr*0.1
16498 call correctBdel(enerc(nen),cor)
16499
16500 if(sruthBdel.eq.1)then
16501
16502 lamBdel=mlamBdel/DensMatDS(nm)
16503 if(lamBdel.lt.rr) lamBdel=rr
16504 lamBdel=lamBdel*cor
16505
16506 c if(sisferBdel.eq.1)then
16507 c go to 10
16508 c endif
16509 c Calculate the minimum angle for restriction of field by
16510 c atomic shell
16511 mT=2.0*asin(1.0/
16512 + (2.0*momentumBdel(nen)*Z_Mean(nm)*5.07e2))
16513 rTetacBdel(nen,nm)=mT
16514 c write(oo,*)' mT=',mT
16515 if(mT.lt.mTetacBdel)then
16516 mT=mTetacBdel ! Throw out too slow interaction. They
16517 ! do not influent to anything
16518 endif
16519 c Calculate the cut angle due to mean free part
16520 A = RuthMat(nm)/cor/
16521 + (momentum2Bdel(nen)*beta2Bdel(nen))/(5.07e10)**2
16522 B = (lamBdel*A)
16523 B = sqrt( B / (B+1.0) )
16524 TetacBdel(nen,nm) = 2.0 * asin(B)
16525 c TetacBdel = acos( (B-1.0) / (B+1.0) )
16526 c TetacBdel=2.0*asin(sqrt(lamBdel*A))
16527 c if(TetacBdel.lt.0.2)then
16528 c TetacBdel=0.2
16529
16530 c If it too little, reset it. It will lead to increasing
16531 c of lamBdel and decriasing of calculation time.
16532 if(TetacBdel(nen,nm) .lt. mT)then
16533 TetacBdel(nen,nm)=mT
16534 B=mT ! B is double precision
16535 r=sin(B/2.0)
16536 lamBdel=1/A * 2.0 * r*r / ( 1 + cos(B) )
16537 * r=cos(TetacBdel(nen,nm))
16538 * lamBdel=A*(1.0+r)/(1.0-r)
16539 * lamBdel=1.0/lamBdel
16540 c lamBdel=(p2*bet2*sin(TetacBdel/2.0)**2) / A
16541 endif
16542
16543 lamaBdel(nen,nm)=lamBdel
16544 B=TetacBdel(nen,nm)
16545 CosTetac12Bdel(nen,nm)=cos(B/2.0)
16546 SinTetac12Bdel(nen,nm)=sin(B/2.0)
16547 if(TetacBdel(nen,nm).gt.1.5)then
16548 sisferaBdel(nen,nm)=1
16549 else
16550 sisferaBdel(nen,nm)=0
16551 endif
16552
16553 c debug mode:
16554 c lamaBdel(nen,nm)=2.0*lamaBdel(nen,nm)
16555
16556 elseif( sruthBdel.eq.0)then ! gaus formula
16557
16558 c calculate paht lengt from mTetacBdel
16559 msig=mTetacBdel
16560 x=msig / ( sqrt(2.0) * 13.6/(betaBdel(nen)*momentumBdel(nen)))
16561 x=x*x
16562
16563 c x=x/DensMatDS(nMatVol(nVolBdel))
16564 x=x*RLenMat(nm)*cor
16565 lamBdel = mlamBdel/DensMatDS(nm)
16566 if(lamBdel.lt.rr) lamBdel=rr
16567 lamBdel=lamBdel*cor
16568 c write(oo,*)' x=',x,' rleng=',rleng
16569 c reset if it is too large
16570 if(lamBdel.lt.x)lamBdel=x
16571 lamaBdel(nen,nm)=lamBdel
16572 msigBdel(nen)=sqrt(2.0)*13.6/
16573 + (betaBdel(nen)*momentumBdel(nen))
16574
16575 c debug mode:
16576 c lamaBdel(nen,nm)=2.0*lamaBdel(nen,nm)
16577 c msigBdel(nen)=0.5*msigBdel(nen)
16578 endif
16579
16580 enddo ! end of nen
16581 endif ! end of if(qAtMat(nm).gt.0)then
16582 enddo ! end of nm
16583 endif ! if(sruthBdel.ne.2)
16584
16585 if(sruthBdel.eq.2)then
16586
16587
16588 call logscale0(qanCBdel,0.03,real(PI),anCBdel,ancCBdel)
16589
16590 c call readCBdel
16591 call read1CBdel
16592
16593 enerCBdel( 1) = 0.5E-3
16594 enerCBdel( 2) = 1.5E-3
16595 enerCBdel( 3) = 2.5E-3
16596 enerCBdel( 4) = 5.5E-3
16597 enerCBdel( 5) = 10.5E-3
16598 enerCBdel( 6) = 21.5E-3
16599 enerCBdel( 7) = 42.5E-3
16600 enerCBdel( 8) = 85.5E-3
16601 enerCBdel( 9) = 170.5E-3
16602 enerCBdel(10) = 341.1E-3
16603 enercCBdel( 1) = 1 E-3
16604 enercCBdel( 2) = 2E-3
16605 enercCBdel( 3) = 4E-3
16606 enercCBdel( 4) = 8E-3
16607 enercCBdel( 5) = 16E-3
16608 enercCBdel( 6) = 32E-3
16609 enercCBdel( 7) = 64E-3
16610 enercCBdel( 8) = 128E-3
16611 enercCBdel( 9) = 256E-3
16612
16613 do nen=1,qeaCBdel
16614 gammaCBdel(nen) = 1.0 + enercCBdel(nen)/ELMAS
16615 beta2CBdel(nen) = ( 2.0 * enercCBdel(nen)/ELMAS
16616 + + (enercCBdel(nen)/ELMAS)**2 ) /
16617 + gammaCBdel(nen)**2
16618 momentum2CBdel(nen) =
16619 + enercCBdel(nen)*enercCBdel(nen) +
16620 + 2.0*ELMAS*enercCBdel(nen)
16621 enddo
16622
16623
16624 do na=1,pqAt
16625
16626 if(Zat(na).gt.0)then ! atom is meant initialized
16627
16628 do nen=1,qeaCBdel
16629 mT=1.0/
16630 + (2.0*sqrt(momentum2CBdel(nen))*Zat(na)*5.07e2)
16631 sRcmCBdel(nen,nm)=2.0*asin(mT)
16632 sRmCBdel(nen,na)= 1/4. *
16633 + Zat(na)*Zat(na)*ELRAD*ELRAD*ELMAS*ELMAS/
16634 + ( momentum2CBdel(nen) * beta2CBdel(nen) * mT**4 ) /
16635 + ( 5.07E10 ** 2 ) * 1.E16
16636
16637 do nang=1,qanCBdel
16638
16639 sRCBdel(nang,nen,na)= 1/4. *
16640 + Zat(na)*Zat(na)*ELRAD*ELRAD*ELMAS*ELMAS/
16641 + ( momentum2CBdel(nen) * beta2CBdel(nen) *
16642 + sin(ancCBdel(nang)/2.0)**4 ) /
16643 + ( 5.07E10 ** 2 ) * 1.E16
16644
16645 enddo
16646
16647 enddo
16648
16649
16650 if(sign_ACBdel(na).eq.1)then
16651
16652 do nen=1,qeaCBdel
16653 do nang=1,qanCBdel
16654 sCBdel(nang,nen,na)=fcalcsCBdel(nang,nen,na)
16655 enddo
16656 enddo
16657
16658 endif
16659
16660 endif
16661
16662 enddo
16663
16664 ! Fill an empty places
16665 nnext = 0
16666 qempt = 0 ! quantity of the empty places is zero
16667
16668
16669
16670 do na1=1,QseqAt
16671 na=nseqAt(na1)
16672 if(Zat(na).eq.0)then ! atom is meant not initialized
16673 write(oo,*)' error in IniBdel'
16674 stop
16675 endif
16676
16677 if(sign_ACBdel(na).eq.1)then
16678 nprev=nnext
16679 nnext=na
16680 endif
16681 if(sign_ACBdel(na).eq.0)then
16682 qempt=qempt+1 ! add pointer of empty place
16683 nempt(qempt)=na
16684 endif
16685
16686 if(sign_ACBdel(na).eq.1 .and. qempt.ne.0)then
16687 if(nprev.eq.0)then ! first filled atom
16688 ! fit by k*Z**2
16689 do nen=1,qeaCBdel
16690 do nang=1,qanCBdel
16691 k=sCBdel(nang,nen,nnext) / Zat(nnext)**2
16692 do nqe=1,qempt
16693 sCBdel(nang,nen,nempt(nqe)) =
16694 + k *Zat(nempt(nqe))**2
16695 enddo ! nqe=1,qempt
16696 enddo ! nang=1,qanCBdel
16697 enddo ! nen=1,qeaCBdel
16698 qempt=0
16699
16700 else ! fit by previous and this filled atom
16701 ! f = k*Z*(Z+c)
16702 do nen=1,qeaCBdel
16703 do nang=1,qanCBdel
16704 f1=sCBdel(nang,nen,nprev)
16705 f2=sCBdel(nang,nen,nnext)
16706 z1=Zat(nprev)
16707 z2=Zat(nnext)
16708 c = (f1 * z2**2 - f2 * z1**2 ) /
16709 + (f2 * z1 - f1 * z2 )
16710 k = f1 / (z1 * ( z1 + c ) )
16711 do nqe=1,qempt
16712 sCBdel(nang,nen,nempt(nqe)) =
16713 + k*Zat(nempt(nqe))*(Zat(nempt(nqe)) + c)
16714 if(sCBdel(nang,nen,nempt(nqe)).lt.0.)
16715 + sCBdel(nang,nen,nempt(nqe)) = 0.
16716 enddo
16717 enddo
16718 enddo
16719 qempt=0
16720
16721 endif
16722 endif
16723
16724
16725 enddo
16726
16727 if(qempt.ne.0)then
16728 if(nprev.eq.0)then
16729 write(oo,*)' error in IniBdel: wrong nprev'
16730 stop
16731 endif
16732 nnext=nprev ! so as to use the same lines as above
16733 do nen=1,qeaCBdel
16734 do nang=1,qanCBdel
16735 k=sCBdel(nang,nen,nnext) / Zat(nnext)**2
16736 do nqe=1,qempt
16737 sCBdel(nang,nen,nempt(nqe)) =
16738 + k *Zat(nempt(nqe))**2
16739 enddo ! nqe=1,qempt
16740 enddo ! nang=1,qanCBdel
16741 enddo ! nen=1,qeaCBdel
16742 qempt=0
16743 endif
16744
16745 c On this point all the atomic cross sections are generated.
16746 c Now it is a high time to generate cross sections
16747 c for initialized materials.
16748
16749 do nm=1,pQMat
16750 if(qAtMat(nm).gt.0)then
16751
16752 lamBdel=mlamBdel/DensMat(nm)
16753
16754 c write(oo,*)' lamBdel=',lamBdel,' mlamBdel=',mlamBdel
16755
16756 do nen=1,qeaCBdel
16757 do nang=1,qanCBdel
16758 sd=0.
16759 do nam=1,qAtMat(nm)
16760 na=AtMAt(nam,nm)
16761 sd = sd + sCBdel(nang,nen,na) * WeightAtMat(nam,nm)
16762 enddo
16763 sd = sd * 1.0E-16 * 5.07E10 * 5.07E10
16764 c Angstrem**2 -> sm**2
16765 c sm**2 -> MeV**-2
16766 sd=sd * 2.0 * PI * sin(ancCBdel(nang))
16767 smaCBdel(nang,nen,nm)=sd
16768
16769 enddo ! nang=1,qanCBdel
16770 enddo ! nen=1,qeaCBdel
16771
16772 do nener=1,qener ! go to working mesh
16773 ! ( The enercCBdel is to rare )
16774 if(enerc(nener).lt.500.0e-6)then
16775 do nang=1,qanCBdel
16776 smatCBdel(nang,nener,nm)=0.0
16777 enddo
16778 lamaBdel(nener,nm)=0.0
16779 tsmatCBdel(nener,nm)=0.0
16780 else
16781
16782 ek=enerc(nener)*1000.0 ! Calculate step lenght by usual formula
16783 if(ek.le.10.0)then
16784 rr = 1.0e-3 * A_Mean(nm)/Z_Mean(nm) *
16785 + 3.872e-3 * ek ** 1.492
16786 rr=rr/DensMat(nm)
16787 else
16788 rr=1.0e-3 * 6.97e-3 * ek ** 1.6
16789 rr=rr/DensMat(nm)
16790 endif
16791 rrCBdel(nener,nm)=rr
16792 rr=rr*koefredCBdel
16793 if(rr.lt.lamBdel) rr=lamBdel
16794 do nen=2,qeaCBdel
16795 if(enercCBdel(nen).gt.enerc(nener))then
16796 n2=nen
16797 goto 100
16798 endif
16799 enddo
16800 n2=qeaCBdel
16801 100 continue
16802 n1=n2-1
16803 do nang=1,qanCBdel
16804 ! Linear interpolation
16805 smatCBdel(nang,nener,nm)=smaCBdel(nang,n1,nm) +
16806 + (smaCBdel(nang,n2,nm) - smaCBdel(nang,n1,nm)) *
16807 + (enerc(nener) - enercCBdel(n1)) /
16808 + (enercCBdel(n2) - enercCBdel(n1))
16809 ismatCBdel(nang,nener,nm)=
16810 + smatCBdel(nang,nener,nm)
16811 + * (anCBdel(nang+1) - anCBdel(nang))
16812 enddo ! nang=1,qanCBdel
16813 rr=1.0/
16814 + (rr*(AVOGADRO/(5.07E10 * 5.07E10))
16815 + *DensMat(nm)/A_mean(nm))
16816 st=0.0 ! restrict low angles
16817 st1=0.0
16818 do nang=qanCBdel,1,-1
16819 st = st + ismatCBdel(nang,nener,nm)
16820 if(st.gt.rr)then
16821 goto 110
16822 else
16823 st1=st
16824 endif
16825 enddo ! nang=qanCBdel,1,-1
16826 nang=0
16827 110 continue
16828 nang=nang+1
16829 TetacBdel(nener,nm)=anCBdel(nang)
16830 tsmatCBdel(nener,nm)=st1
16831 lamaBdel(nener,nm)=1.0/
16832 + (tsmatCBdel(nener,nm)*(AVOGADRO/(5.07E10 * 5.07E10))
16833 + *DensMat(nm)/A_mean(nm))
16834 do n=1,nang-1
16835 ismatCBdel(n,nener,nm)=0.0
16836 enddo
16837 call lhispre(ismatCBdel(1,nener,nm),qanCBdel)
16838 if(TetacBdel(nener,nm).gt.1.0)then
16839 sisferaBdel(nener,nm)=1
16840 endif
16841 endif
16842 enddo ! nener=1,qener
16843
16844
16845 endif
16846 enddo
16847
16848
16849
16850 c All done !
16851
16852 endif ! if(sruthBdel.eq.2)
16853
16854
16855 end
16856
16857 subroutine readCBdel
16858
16859 implicit none
16860
16861 c include 'GoEvent.inc'
16862 +SEQ,GoEvent.
16863 c include 'ener.inc'
16864 +SEQ,ener.
16865 c include 'atoms.inc'
16866 +SEQ,atoms.
16867 c include 'matters.inc'
16868 +SEQ,matters.
16869 c include 'crosec.inc'
16870 +SEQ,crosec.
16871 c include 'volume.inc'
16872 +SEQ,volume.
16873 c include 'bdel.inc'
16874 +SEQ,bdel.
16875
16876 character*1 a
16877 integer ios
16878 integer na,z,i,n,j
16879
16880 open(1,FILE='cbdel.dat',IOSTAT=ios,STATUS='OLD')
16881 if(ios.ne.0)then
16882 write(oo,*)' readCBdel: can not open file readCBdel.dat'
16883 stop
16884 endif
16885
16886 do na=1,pqAt
16887
16888 if(Zat(na).gt.0)then ! atom is meant initialized
16889
16890 sign_ACBdel(na)=0 ! cleaning
16891
16892 do n=1,100000
16893 read(1,'(A1)',END=100)a
16894 c write (6,*)a
16895 if(a.eq.'$')then
16896 backspace (1)
16897 read(1,'(A1,I3)')a,z
16898 if(z.eq.Zat(na))then
16899 write(oo,*)a,z
16900 do i=1,4
16901 read(1,*)(ACBdel(i,j,na),j=1,qeaCBdel)
16902 enddo
16903 do i=0,6
16904 read(1,*)(CCBdel(i,j,na),j=1,qeaCBdel)
16905 enddo
16906 read(1,*)(BCBdel(j,na),j=1,qeaCBdel)
16907 sign_ACBdel(na)=1 ! sign of reading
16908 go to 100
16909 endif
16910 endif
16911 enddo
16912 100 rewind(1)
16913
16914 endif
16915
16916 enddo
16917
16918 close(1)
16919
16920 end
16921
16922 subroutine read1CBdel
16923 c
16924 c This subroutine must copy data not from external file
16925 c but from internal data arrays (so as to avoid input which
16926 c is often machine-dependent)
16927 c
16928 implicit none
16929
16930 c include 'GoEvent.inc'
16931 +SEQ,GoEvent.
16932 c include 'ener.inc'
16933 +SEQ,ener.
16934 c include 'atoms.inc'
16935 +SEQ,atoms.
16936 c include 'matters.inc'
16937 +SEQ,matters.
16938 c include 'crosec.inc'
16939 +SEQ,crosec.
16940 c include 'volume.inc'
16941 +SEQ,volume.
16942 c include 'bdel.inc'
16943 +SEQ,bdel.
16944
16945 c character*1 a
16946 c integer ios
16947 integer na,i,n,j
16948 c integer z
16949
16950 integer psqAt
16951 parameter (psqAt=11) ! Now only 11 atoms included
16952 integer ZsCBdel(psqAt) ! atomic charge
16953 real AsCBdel(4,pqeaCBdel,psqAt)
16954 real CsCBdel(0:6,pqeaCBdel,psqAt)
16955 real BsCBdel(pqeaCBdel,psqAt)
16956 *** Modified on 6/2/97 RV
16957 C save /ZsCBdel/,/AsCBdel/,/CsCBdel/,/BsCBdel/
16958 save ZsCBdel,AsCBdel,CsCBdel,BsCBdel
16959 *** End of modification.
16960
16961 c include 'cbdeldat.inc'
16962 +SEQ,cbdeldat.
16963
16964
16965 do na=1,pqAt
16966
16967 if(Zat(na).gt.0)then ! atom is meant initialized
16968
16969 sign_ACBdel(na)=0 ! cleaning
16970
16971 do n=1,psqAt
16972 if(ZsCBdel(n).eq.Zat(na))then
16973 c write(oo,*)a,z
16974 do i=1,4
16975 do j=1,qeaCBdel
16976 ACBdel(i,j,na)=AsCBdel(i,j,n)
16977 enddo
16978 enddo
16979 do i=0,6
16980 do j=1,qeaCBdel
16981 CCBdel(i,j,na)=CsCBdel(i,j,n)
16982 enddo
16983 enddo
16984 do j=1,qeaCBdel
16985 BCBdel(j,na)=BsCBdel(j,n)
16986 enddo
16987 sign_ACBdel(na)=1 ! sign of reading
16988 go to 100
16989 endif
16990 enddo
16991 100 continue
16992
16993 endif
16994
16995 enddo
16996
16997 end
16998
16999 function fcalcsCBdel(nang,nen,na)
17000 c
17001 c calculates elastic cross section per one atom by fit formula
17002 c in Angstrem**2/Srad. (10**-16 sm2 /Srad)
17003 c
17004
17005 implicit none
17006
17007 real fcalcsCBdel
17008 integer nang,nen,na
17009
17010 c include 'GoEvent.inc'
17011 +SEQ,GoEvent.
17012 c include 'cconst.inc'
17013 +SEQ,cconst.
17014 c include 'ener.inc'
17015 +SEQ,ener.
17016 c include 'atoms.inc'
17017 +SEQ,atoms.
17018 c include 'matters.inc'
17019 +SEQ,matters.
17020 c include 'volume.inc'
17021 +SEQ,volume.
17022 c include 'part.inc'
17023 +SEQ,part.
17024 c include 'bdel.inc'
17025 +SEQ,bdel.
17026
17027 real*8 ang,cang,cang2,cang3,cang4,cang5,cang6,s,r
17028 real*8 coe
17029 c integer n
17030 integer i
17031
17032 ang=ancCBdel(nang)
17033 c ang=0.0
17034 cang=cos(ang)
17035 cang2=cang *cang
17036 cang3=cang2*cang
17037 cang4=cang3*cang
17038 cang5=cang4*cang
17039 cang6=cang5*cang
17040
17041 c write(oo,*)' A=',(ACBdel(i,nen,na),i=1,4)
17042 c write(oo,*)' C=',(CCBdel(i,nen,na),i=0,6)
17043 c write(oo,*)' B=',BCBdel(nen,na)
17044
17045 r=0.0
17046 do i=1,4
17047 r=r+ACBdel(i,nen,na) /
17048 + (1.0-cang+2.0*dble(BCBdel(nen,na)))**i
17049 c write(oo,*)' r=',r
17050 enddo
17051
17052 r=r+dble(CCBdel(0,nen,na))*
17053 + 1.0
17054 c write(oo,*)' r=',r
17055 r=r+dble(CCBdel(1,nen,na))*
17056 + cang
17057 c write(oo,*)' r=',r
17058 r=r+dble(CCBdel(2,nen,na))*
17059 + 0.5*(3.0*cang2-1.0)
17060 c write(oo,*)' r=',r
17061 r=r+dble(CCBdel(3,nen,na))*
17062 + 0.5*(5.0*cang3 - 3*cang)
17063 c write(oo,*)' r=',r
17064 r=r+dble(CCBdel(4,nen,na))*
17065 + 1.0/8.0 * (35.0*cang4 - 30.0*cang2 + 3.0)
17066 c write(oo,*)' r=',r
17067 r=r+dble(CCBdel(5,nen,na))*
17068 + 1.0/8.0 * (63.0*cang5 - 70.0*cang3 + 15.0*cang)
17069 c write(oo,*)' r=',r
17070 r=r+dble(CCBdel(6,nen,na))*
17071 + 1.0/16.0 * (231.0*cang6 - 315.0*cang4 + 105.0*cang2 -5.0)
17072 c write(oo,*)' r=',r
17073
17074 s=r
17075
17076 c beneath is coefficient from erratum.
17077 coe=Zat(na)/(FSCON*FSCON)/(gammaCBdel(nen)*beta2CBdel(nen))
17078
17079 s=s*coe*coe
17080
17081 fcalcsCBdel=s
17082
17083 end
17084
17085 function fcalcsmCBdel(nang,nen,nm)
17086
17087 implicit none
17088
17089 real fcalcsmCBdel
17090 integer nang,nen,nm
17091
17092 c include 'GoEvent.inc'
17093 +SEQ,GoEvent.
17094 c include 'cconst.inc'
17095 +SEQ,cconst.
17096 c include 'ener.inc'
17097 +SEQ,ener.
17098 c include 'atoms.inc'
17099 +SEQ,atoms.
17100 c include 'matters.inc'
17101 +SEQ,matters.
17102 c include 'volume.inc'
17103 +SEQ,volume.
17104 c include 'part.inc'
17105 +SEQ,part.
17106 c include 'bdel.inc'
17107 +SEQ,bdel.
17108
17109 real*8 ang,cang,cang2,cang3,cang4,cang5,cang6,s,r
17110 real*8 coe
17111 integer n,na,i
17112
17113 ang=ancCBdel(nang)
17114 c ang=0.0
17115 cang=cos(ang)
17116 cang2=cang *cang
17117 cang3=cang2*cang
17118 cang4=cang3*cang
17119 cang5=cang4*cang
17120 cang6=cang5*cang
17121 s=0.0
17122 do n=1,QAtMat(nm)
17123 na=AtMat(n,nm)
17124 c write(oo,*)' A=',(ACBdel(i,nen,na),i=1,4)
17125 c write(oo,*)' C=',(CCBdel(i,nen,na),i=0,6)
17126 c write(oo,*)' B=',BCBdel(nen,na)
17127
17128 r=0.0
17129 do i=1,4
17130 r=r+ACBdel(i,nen,na) /
17131 + (1.0-cang+2.0*dble(BCBdel(nen,na)))**i
17132 write(oo,*)' r=',r
17133 enddo
17134
17135 r=r+dble(CCBdel(0,nen,na))*
17136 + 1.0
17137 write(oo,*)' r=',r
17138 r=r+dble(CCBdel(1,nen,na))*
17139 + cang
17140 write(oo,*)' r=',r
17141 r=r+dble(CCBdel(2,nen,na))*
17142 + 0.5*(3.0*cang2-1.0)
17143 write(oo,*)' r=',r
17144 r=r+dble(CCBdel(3,nen,na))*
17145 + 0.5*(5.0*cang3 - 3*cang)
17146 write(oo,*)' r=',r
17147 r=r+dble(CCBdel(4,nen,na))*
17148 + 1.0/8.0 * (35.0*cang4 - 30.0*cang2 + 3.0)
17149 write(oo,*)' r=',r
17150 r=r+dble(CCBdel(5,nen,na))*
17151 + 1.0/8.0 * (63.0*cang5 - 70.0*cang3 + 15.0*cang)
17152 write(oo,*)' r=',r
17153 r=r+dble(CCBdel(6,nen,na))*
17154 + 1.0/16.0 * (231.0*cang6 - 315.0*cang4 + 105.0*cang2 -5.0)
17155 write(oo,*)' r=',r
17156
17157 r=r*WeightAtMat(n,nm)
17158 write(oo,*)' r=',r
17159 s=s+r
17160
17161 enddo
17162
17163 coe=Z_Mean(nm)/(FSCON*FSCON)/(gammaCBdel(nen)*beta2CBdel(nen))
17164
17165 s=s*coe*coe
17166
17167 fcalcsmCBdel=s
17168
17169 end
17170
17171
17172 subroutine SeLossBdel(nm,e,i,el)
17173 c
17174 c Calculation of the energy loss in 1 sm
17175 c
17176 implicit none
17177
17178 c include 'ener.inc'
17179 +SEQ,ener.
17180 c include 'atoms.inc'
17181 +SEQ,atoms.
17182 c include 'matters.inc'
17183 +SEQ,matters.
17184 c include 'volume.inc'
17185 +SEQ,volume.
17186 c include 'bdel.inc'
17187 +SEQ,bdel.
17188
17189 integer nm
17190 real e,el
17191 integer i,i1 ! i is start index i1 is new
17192 integer n
17193
17194 c if(e.lt.eMinBdel)then
17195 c el=0.0
17196 c i1=0
17197 c return
17198 c endif
17199 if(i.le.0.or.i.gt.qener)then
17200 i=qener
17201 endif
17202 c do n=i,iMinBdel,-1
17203 do n=i,1,-1
17204 if(e.ge.ener(n))then
17205 i1=n
17206 go to 10
17207 endif
17208 enddo
17209 c write(oo,*)' Error in FeLossBdel'
17210 c stop
17211 el=eLossBdel(1,nm)
17212 i=1
17213 return
17214 10 continue
17215 i=i1
17216 el=eLossBdel(i,nm)+(e-ener(i))*
17217 + (eLossBdel(i+1,nm)-eLossBdel(i,nm))/(ener(i+1)-ener(i))
17218 c write(oo,*)' nm,e,i,el=',nm,e,i,el
17219
17220 end
17221
17222
17223 subroutine SstepBdel
17224 c
17225 c Calc. of step lenght
17226 c
17227 implicit none
17228
17229 c include 'GoEvent.inc'
17230 +SEQ,GoEvent.
17231 c include 'ener.inc'
17232 +SEQ,ener.
17233 c include 'atoms.inc'
17234 +SEQ,atoms.
17235 c include 'matters.inc'
17236 +SEQ,matters.
17237 c include 'crosec.inc'
17238 +SEQ,crosec.
17239 c include 'volume.inc'
17240 +SEQ,volume.
17241 c include 'bdel.inc'
17242 +SEQ,bdel.
17243
17244 c real pntBdel(3),velBdel(3),step
17245 c integer nv,sgonext
17246 integer i
17247 real*8 mleng
17248 real lossmean
17249 real*8 rleng
17250
17251 real rr,ek,r,ranfl
17252 integer nm
17253
17254 if(nVolBdel.eq.0.or.sgonextBdel.eq.1)then !first find the volume
17255 c sisferBdel=0 ! obsolete
17256 call VolNumZcoor(pntBdel(3),velBdel(3),nVolBdel)
17257 if(nVolBdel.eq.0)return !out of geometry
17258 c if(sMatC(nMatVol(nVolBdel)).eq.0)return
17259 endif
17260 c write(oo,*)' pntBdel(3)=',pntBdel(3)
17261 c write(oo,*)' velBdel=',velBdel
17262 c write(oo,*)' nVolBdel=',nVolBdel
17263 c write(oo,*)' mleng=',mleng
17264 call VolPathLeng(pntBdel(3),velBdel,nVolBdel,mleng)
17265 if(nMatVol(nVolBdel).eq.0)then ! empty volume: no interaction
17266 estepBdel=0.0
17267 stepBdel=mleng
17268 sgonextBdel=1
17269 sturnBdel=0
17270 go to 10
17271 endif
17272
17273 if(eBdel.le.cuteneBdel)then ! the same number in treatdel.f
17274
17275 nm=nMatVol(nVolBdel)
17276 ek=eBdel*1000.0
17277 if(ek.le.10.0)then
17278 rr=1.0e-3 * A_Mean(nm)/Z_Mean(nm) * 3.872e-3 * ek ** 1.492
17279 rr=rr/DensMat(nm)
17280 else
17281 rr=1.0e-3 * 6.97e-3 * ek ** 1.6
17282 rr=rr/DensMat(nm)
17283 endif
17284 c rr=rr*0.6
17285 r=ranfl()
17286 c rr = rr * (0.3 + 0.8*r)
17287 c rr = rr * (0.4 + 1.0*r)
17288 rr = rr * (0.3 + 0.8*r)
17289 stepBdel=rr
17290 if(stepBdel.lt.mleng)then
17291 estepBdel=eBdel
17292 sgonextBdel=0
17293 else
17294 estepBdel=eBdel*mleng/stepBdel
17295 sgonextBdel=1
17296 endif
17297 sturnBdel=0
17298 go to 10
17299 endif
17300
17301 call SeLossBdel(nMatVol(nVolBdel),eBdel,iBdel,lossmean)
17302 c if(nevt.eq.1.and.(nBdel.eq.8.or.nBdel.eq.9))then
17303 c write(oo,*)' mleng,lossmean=',mleng,lossmean
17304 c endif
17305 estepBdel=mleng*lossmean
17306 stepBdel=mleng
17307 sgonextBdel=1
17308 sturnBdel=0
17309 c if(srandoff.ne.1)then
17310 if(sruthBdel.eq.1.or.sruthBdel.eq.2)then !lengt to coulomb interaction
17311 call SRLengBdel(rleng)
17312 else
17313 call SMLengBdel(rleng)
17314 c rleng=mlamBdel/DensMatDS(nMatVol(nVolBdel))
17315 endif
17316 if(stepBdel.gt.rleng)then !reduce step to point of turn
17317 stepBdel=rleng
17318 estepBdel=rleng*lossmean
17319 sgonextBdel=0
17320 sturnBdel=1
17321 endif
17322 c endif
17323 c if(nevt.eq.1.and.(nBdel.eq.8.or.nBdel.eq.9))then
17324 c write(oo,*)' rleng,estepBdel=',rleng,estepBdel
17325 c endif
17326 if(estepBdel.gt.eMinBdel)then
17327 if(estepBdel.gt.0.1*eBdel)then
17328 ! reduce the step ...
17329 estepBdel=0.1*eBdel ! Maximum
17330 ! but not too much:
17331 if(estepBdel.lt.eMinBdel)estepBdel=eMinBdel
17332 ! For the case when eBdel<eMinBdel
17333 if(estepBdel.gt.eBdel)estepBdel=eBdel
17334 stepBdel=estepBdel/lossmean
17335 sgonextBdel=0
17336 if(sruthBdel.eq.1.or.sruthBdel.eq.2)then
17337 !since step must be reduced
17338 sturnBdel=0
17339 else
17340 sturnBdel=1
17341 endif
17342 endif
17343 endif
17344 c if(nevt.eq.1.and.(nBdel.eq.8.or.nBdel.eq.9))then
17345 c write(oo,*)' estepBdel=',estepBdel
17346 c endif
17347
17348 c if(estepBdel.gt.0.1*eBdel)then
17349 c estepBdel=0.1*eBdel
17350 c stepBdel=estepBdel/lossmean
17351 c sgonextBdel=0
17352 c if(sruthBdel.eq.1)then
17353 c sturnBdel=0
17354 c else
17355 c sturnBdel=1
17356 c endif
17357 c endif
17358
17359 10 do i=1,3
17360 npntBdel(i)=pntBdel(i)+stepBdel*velBdel(i)
17361 enddo
17362
17363 if(estepBdel.lt.0.0)then
17364 write(oo,*)' error in SstepBdel: estepBdel is negative'
17365 call PriBdel(1)
17366 write(oo,*)' lossmean=',lossmean
17367 write(oo,*)' mleng=',mleng,' rleng=',rleng
17368 stop
17369 endif
17370
17371 end
17372
17373
17374
17375 subroutine SRLengBdel(rleng)
17376 c
17377 c Step lenght limit due to multiple scatering
17378 c The method with Rutherford cross section
17379 c
17380 implicit none
17381
17382 c include 'GoEvent.inc'
17383 +SEQ,GoEvent.
17384 c include 'ener.inc'
17385 +SEQ,ener.
17386 c include 'atoms.inc'
17387 +SEQ,atoms.
17388 c include 'matters.inc'
17389 +SEQ,matters.
17390 c include 'crosec.inc'
17391 +SEQ,crosec.
17392 c include 'volume.inc'
17393 +SEQ,volume.
17394 c include 'bdel.inc'
17395 +SEQ,bdel.
17396 c include 'cconst.inc'
17397 +SEQ,cconst.
17398
17399 real*8 rleng
17400 c real bet2,p2,A,B
17401
17402 c real asin,acos,sqrt,alog,ranfl
17403 real ranfl
17404 real r
17405 c real mT
17406
17407 r=ranfl()
17408 if(r.gt.0.99999)then
17409 rleng=1.0e30
17410 return
17411 endif
17412 rleng=-lamaBdel(iBdel,nMatVol(nVolBdel))*alog(1.0-r)
17413 lamBdel=lamaBdel(iBdel,nMatVol(nVolBdel))
17414
17415
17416 end
17417
17418
17419 subroutine SMLengBdel(rleng)
17420 c
17421 c Step lenght limit due to multiple scatering
17422 c The method with mean multiple scatering angle form
17423 c
17424
17425 implicit none
17426
17427 c include 'GoEvent.inc'
17428 +SEQ,GoEvent.
17429 c include 'ener.inc'
17430 +SEQ,ener.
17431 c include 'atoms.inc'
17432 +SEQ,atoms.
17433 c include 'matters.inc'
17434 +SEQ,matters.
17435 c include 'crosec.inc'
17436 +SEQ,crosec.
17437 c include 'volume.inc'
17438 +SEQ,volume.
17439 c include 'bdel.inc'
17440 +SEQ,bdel.
17441 c include 'cconst.inc'
17442 +SEQ,cconst.
17443
17444 real*8 rleng
17445 c real bet,p,x
17446 c real sqrt
17447 c real msig
17448 c
17449 rleng=lamaBdel(iBdel,nMatVol(nVolBdel))
17450 * go to 100
17451 *c calculate paht lengt from mTetacBdel
17452 * bet=1.0-ELMAS*ELMAS/((ELMAS+eBdel)*(ELMAS+eBdel))
17453 * bet=sqrt(bet)
17454 * p=eBdel*eBdel+2.0*ELMAS*eBdel
17455 * p=sqrt(p)
17456 * msig=mTetacBdel
17457 * x=msig/(sqrt(2.0)*13.6/(bet*p))
17458 * x=x*x
17459 *
17460 *c x=x/DensMat(nMatVol(nVolBdel))
17461 * x=x*RLenMat(nMatVol(nVolBdel))
17462 * rleng=mlamBdel/DensMat(nMatVol(nVolBdel))
17463 *c write(oo,*)' x=',x,' rleng=',rleng
17464 *c reset if it is too large
17465 * if(rleng.lt.x)rleng=x
17466 *
17467 end
17468
17469
17470
17471
17472 subroutine TurnBdel
17473
17474 c Turn the vector of velocity of the delta electron
17475
17476 implicit none
17477
17478 c include 'GoEvent.inc'
17479 +SEQ,GoEvent.
17480 c include 'del.inc'
17481 +SEQ,del.
17482 c include 'ener.inc'
17483 +SEQ,ener.
17484 c include 'atoms.inc'
17485 +SEQ,atoms.
17486 c include 'matters.inc'
17487 +SEQ,matters.
17488 c include 'crosec.inc'
17489 +SEQ,crosec.
17490 c include 'volume.inc'
17491 +SEQ,volume.
17492 c include 'cel.inc'
17493 +SEQ,cel.
17494 c include 'bdel.inc'
17495 +SEQ,bdel.
17496 c include 'cconst.inc'
17497 +SEQ,cconst.
17498
17499 real*8 r,rs,rsin12,rcos12
17500 real*8 x,msig
17501
17502 real ranfl
17503 c real ranfl,sqrt,sin,cos,acos
17504 c real*8 dsqrt
17505 c real rs,rss
17506 c integer n,i
17507 real rra,rrb
17508
17509 real xran,dran
17510 integer iran
17511
17512 c if(sisferBdel.eq.0)then
17513
17514 if(sruthBdel.eq.2)then
17515
17516 if(enerc(iBdel).lt.500.0e-6 .or.
17517 + sisferaBdel(iBdel,nMatVol(nVolBdel)).eq.1)then
17518 sisferBdel=1
17519 TetaBdel=0.0
17520 else
17521 sisferBdel=0
17522 call lhisran(ismatCBdel(1,iBdel,nMatVol(nVolBdel)),
17523 + qanCBdel, 1.0, 1.0, xran)
17524 iran=xran
17525 if(iran.lt.1.or.iran.gt.qanCBdel)then
17526 write(oo,*)' Worning of TurnBdel: iran=',iran,
17527 + ' xran=',xran
17528 if(iran.lt.1)then
17529 iran=1
17530 else
17531 iran=qanCBdel
17532 endif
17533 endif
17534 dran=xran-iran
17535 TetaBdel=anCBdel(iran)+(anCBdel(iran+1)-anCBdel(iran))*dran
17536 endif
17537
17538 elseif(sruthBdel.eq.1)then
17539
17540 if(sisferaBdel(iBdel,nMatVol(nVolBdel)).eq.1)then
17541 sisferBdel=1
17542 TetaBdel=0.0
17543 else
17544 c if(TetacBdel.ge.1.5)then
17545 c sisferBdel=1
17546 c TetaBdel=0.0
17547 c else
17548
17549 r=ranfl()
17550 rsin12=SinTetac12Bdel(iBdel,nMatVol(nVolBdel))
17551 rcos12=CosTetac12Bdel(iBdel,nMatVol(nVolBdel))
17552 rs = 1.0 - r * rcos12 * rcos12
17553 if(rs.eq.0.0)then
17554 TetaBdel=PI
17555 else
17556 rs=rsin12 / sqrt( rs )
17557 rs=2.0 * asin(rs)
17558 TetaBdel=rs
17559 endif
17560
17561 c rs=sin(TetacBdel/2.0)/sqrt(1.0-r*cos(TetacBdel/2.0)**2)
17562 c TetaBdel=asin(rs)*2.0
17563 * rs=cos(TetacBdel)
17564 * rs=1.0-(1.0-rs)/(1.0-r*0.5*(1.0+rs))
17565 * TetaBdel=acos(rs)
17566 c write(oo,*)' TetacBdel,TetaBdel,r=',TetacBdel,TetaBdel,r
17567
17568 endif
17569
17570 else
17571
17572 x=stepBdel/RLenMat(nMatVol(nVolBdel))
17573 msig=msigBdel(iBdel)*
17574 + sqrt(x)
17575 if(msig.ge.1.5)then
17576 sisferBdel=1
17577 TetaBdel=0.0
17578 else
17579 call lranor(rra,rrb)
17580 TetaBdel=rra*msig
17581 endif
17582
17583
17584 endif ! sruthBdel.eq. ...
17585
17586 if(sisferBdel.eq.1)then
17587 call sfersim(velBdel)
17588 else
17589 call MakeNewSys(e1Bdel,e2Bdel,e3Bdel,velBdel)
17590 call turnvec(e1Bdel,e2Bdel,e3Bdel,TetaBdel,velBdel)
17591 endif
17592
17593 end
17594
17595
17596
17597 subroutine correctBdel(e,r)
17598
17599 implicit none
17600
17601 real e,r
17602 real a,b,k,x
17603 c b-k*(x-a)**2 = 0 => x= a +- sqrt(b/k)
17604 c k = b / (x - a)**2
17605 a=2.5
17606 b=4
17607 c k=1.0/4.0
17608 x=0.0
17609 k=b/((x-a)*(x-a))
17610 x=e*1000.0
17611 r=b-k*(x-a)*(x-a)
17612 if(r.lt.0.0)then
17613 r=1
17614 else
17615 r=r+1
17616 endif
17617
17618 end
17619
17620
17621 subroutine PriBdel(i)
17622
17623 implicit none
17624
17625 c include 'GoEvent.inc'
17626 +SEQ,GoEvent.
17627 c include 'ener.inc'
17628 +SEQ,ener.
17629 c include 'atoms.inc'
17630 +SEQ,atoms.
17631 c include 'matters.inc'
17632 +SEQ,matters.
17633 c include 'crosec.inc'
17634 +SEQ,crosec.
17635 c include 'volume.inc'
17636 +SEQ,volume.
17637 c include 'bdel.inc'
17638 +SEQ,bdel.
17639
17640 integer i
17641
17642 integer ne,nm
17643 integer nang,nen,na
17644
17645 if(soo.eq.0)return
17646
17647 write(oo,*)
17648 write(oo,*)' PriBdel(',i,'):'
17649 if(i.eq.0)then
17650 c write(oo,*)' eMinBdel=',eMinBdel,' iMinBdel=',iMinBdel
17651 write(oo,*)' eMinBdel=',eMinBdel
17652
17653 write(oo,*)' ne, enerc, betaBdel,',
17654 + ' beta2Bdel,momentumBdel,momentum2Bdel,msigBdel'
17655 do ne=1,qener
17656 write(oo,'(1X,i5,6(1X,E10.5))')ne,enerc(ne),betaBdel(ne),
17657 + beta2Bdel(ne),
17658 + momentumBdel(ne),momentum2Bdel(ne),msigBdel(ne)
17659 enddo
17660
17661 do nm=1,pQMat
17662 if(qAtMat(nm).gt.0)then
17663 c if(sMatC(nm).gt.0)then
17664 write(oo,*)' matter number ',nm
17665 write(oo,*)' enerc elossbdel',
17666 + ' lamaBdel rTetacBdel TetacBdel'
17667 write(oo,*)' ',
17668 + ' Cos12TetacBdel Sin12TetacBdel',
17669 + ' sisferaBdel'
17670
17671 c do ne=iMinBdel,qener
17672 do ne=1,qener
17673 write(oo,'(1X,7(1X,E9.4),1X,I3)')
17674 + enerc(ne),eLossBdel(ne,nm),lamaBdel(ne,nm),
17675 + rTetacBdel(ne,nm),TetacBdel(ne,nm),
17676 + CosTetac12Bdel(ne,nm),SinTetac12Bdel(ne,nm),
17677 + sisferaBdel(ne,nm)
17678 enddo
17679
17680 c endif
17681 endif
17682 enddo
17683
17684 elseif(i.eq.2)then
17685
17686 write(oo,*)' nang anCBdel ancCBdel'
17687 do nang=1,pqanCBdel
17688 write(oo,*)nang,anCBdel(nang),ancCBdel(nang)
17689 enddo
17690 write(oo,*)' nen enerCBdel enercCBdel',
17691 + ' gammaCBdel beta2CBdel'
17692 do nen=1,pqeaCBdel
17693 write(oo,*)nen,enerCBdel(nen),enercCBdel(nen),
17694 + gammaCBdel(nen), beta2CBdel(nen)
17695 enddo
17696 do na=1,pQAt
17697
17698 if(Zat(na).gt.0)then
17699
17700 write(oo,*)' atom number ',na
17701 if(sign_ACBdel(na).gt.0)then
17702 do i=1,4
17703 write(oo,'(1X,i1,1X,9E10.3)')i,(ACBdel(i,nen,na),nen=1,qeaCBdel)
17704 enddo
17705 do i=0,6
17706 write(oo,'(1X,i1,1X,9E10.3)')i,(CCBdel(i,nen,na),nen=1,qeaCBdel)
17707 enddo
17708 write(oo,'(1X,i1,1X,9E10.3)')i,(BCBdel(nen,na),nen=1,qeaCBdel)
17709 endif
17710
17711 write(oo,*)' nang, ancCBdel, differentioal cross sections:'
17712 do nang=1,qanCBdel
17713 write(oo,'(1X,i3,1X,10E10.3)')
17714 + nang,ancCBdel(nang),(sCBdel(nang,nen,na),nen=1,qeaCBdel)
17715 enddo
17716 write(oo,*)' nang, ancCBdel, Ruth. differentioal cross sections:'
17717 write(oo,'(1X,3X,1X,10X,9E10.3)')
17718 + (sRcmCBdel(nen,na),nen=1,qeaCBdel)
17719 write(oo,'(1X,3X,1X,10X,9E10.3)')
17720 + (sRmCBdel(nen,na),nen=1,qeaCBdel)
17721 do nang=1,qanCBdel
17722 write(oo,'(1X,i3,1X,10E10.3)')
17723 + nang,ancCBdel(nang),(sRCBdel(nang,nen,na),nen=1,qeaCBdel)
17724 enddo
17725
17726 endif ! Zat(na).gt.0
17727 enddo ! na=1,pQAt
17728
17729 do nm=1,pQMat
17730 if(qAtMat(nm).gt.0)then
17731 write(oo,*)' matter number ',nm
17732 write(oo,*)' nang, ancCBdel, differentioal cross sections:'
17733 do nang=1,qanCBdel
17734 write(oo,'(1X,i3,1X,10E10.3)')
17735 + nang,ancCBdel(nang),(smaCBdel(nang,nen,nm),nen=1,qeaCBdel)
17736 enddo
17737 c smatCBdel and ismatCBdel are not printed now, they is too big.
17738
17739 write(oo,*)' nen, enerc, tsmatCBdel, lamaBdel, ',
17740 + ' usual range TetacBdel:'
17741 do nen=1,qener
17742 write(oo,'(1X,i3,1X,5E11.3)')
17743 + nen,enerc(nen),tsmatCBdel(nen,nm),lamaBdel(nen,nm),
17744 + rrCBdel(nen,nm),TetacBdel(nen,nm)
17745 enddo
17746 write(oo,*)' Beneth is invers order, energy along vertical'
17747 write(oo,*)' Angles are horizontally:'
17748 write(oo,'(1X,3X,1X,11X,30E11.3)')(ancCBdel(nang),
17749 + nang=1,qanCBdel)
17750 write(oo,*)' nener, ener, smatCBdel(nang,nen,nm)'
17751 do nen=1,qener ! next line fixed to 30 angles
17752 write(oo,'(1X,i3,1X,31E11.3)')
17753 + nen,enerc(nen),(smatCBdel(nang,nen,nm),nang=1,qanCBdel)
17754 enddo
17755 write(oo,*)' nener, ener, ismatCBdel(nang,nen,nm)'
17756 do nen=1,qener ! next line fixed to 30 angles
17757 write(oo,'(1X,i3,1X,31E11.3)')
17758 + nen,enerc(nen),(ismatCBdel(nang,nen,nm),nang=1,qanCBdel)
17759 enddo
17760 c write(oo,'(5X,9E11.3)')
17761 c + (tsmatCBdel(nen,nm),nen=1,qeaCBdel)
17762 c write(oo,*)' nang, ancCBdel, integrated cross sections:'
17763 c do nang=1,qanCBdel
17764 c write(oo,'(1X,i3,1X,10E11.3)')
17765 c + nang,ancCBdel(nang),(ismatCBdel(nang,nen,nm),nen=1,qeaCBdel)
17766 c enddo
17767
17768 endif ! qAtMat(nm).gt.0
17769 enddo ! nm=1,pQMat
17770
17771 else ! i=1
17772
17773
17774
17775 write(oo,*)' nBdel=',nBdel,' nstepBdel=',nstepBdel,
17776 + ' eBdel=',eBdel
17777 write(oo,*)' pntBdel=',pntBdel
17778 write(oo,*)' npntBdel=',npntBdel
17779 write(oo,*)' velBdel=',velBdel
17780 write(oo,*)' stepBdel=',stepBdel,' estepBdel=',estepBdel
17781 write(oo,*)' e1Bdel=',e1Bdel
17782 write(oo,*)' e2Bdel=',e2Bdel
17783 write(oo,*)' e3Bdel=',e3Bdel
17784 if(iBdel.ge.1 .and. iBdel.le.qener .and.
17785 + nVolBdel.ge.1 .and. nVolBdel.le.qVol)then
17786 if(nMatVol(nVolBdel).ge.1 .and. nMatVol(nVolBdel).le.pqMat)then
17787 write(oo,*)' TetacBdel(iBdel,.)=',
17788 + TetacBdel(iBdel,nMatVol(nVolBdel)),
17789 + ' TetaBdel=',TetaBdel,' -usually prev.'
17790 else
17791 write(oo,*)' cannot print TetacBdel'
17792 write(oo,*)' nMatVol(nVolBdel)=',nMatVol(nVolBdel)
17793 endif
17794 else
17795 write(oo,*)' cannot print TetacBdel'
17796 write(oo,*)' iBdel=',iBdel,' nVolBdel=',nVolBdel
17797 endif
17798 write(oo,*)' lamBdel=',lamBdel
17799 write(oo,*)' sturnBdel=',sturnBdel
17800 write(oo,*)' sruthBdel=',sruthBdel,' sisferBdel=',sisferBdel
17801 write(oo,*)' nVolBdel=',nVolBdel,' sgonextBdel=',sgonextBdel,
17802 + ' iBdel=',iBdel
17803 endif
17804
17805
17806
17807 end
17808
17809
17810 +DECK,lstrel1.
17811 SUBROUTINE lstREL1(EEL,CHARGE,nmat,DEDX)
17812 C.
17813 implicit none
17814
17815 C. ******************************************************************
17816 C. * *
17817 C. * Compute ion losses for electron/positron *
17818 C. * *
17819 C. * ==>Called by : GDRELA *
17820 C. * Author G.Patrick ********* *
17821 C. * *
17822 C. ******************************************************************
17823 C.
17824 real EEL ! kinetic energy
17825 real CHARGE ! +/-1.
17826 c integer JMA ! =LQ(JMATE-I) I-number of medium
17827 integer nmat ! number of matter
17828 real DEDX ! loss
17829
17830 c include 'ener.inc'
17831 +SEQ,ener.
17832 c include 'atoms.inc'
17833 +SEQ,atoms.
17834 c include 'matters.inc'
17835 +SEQ,matters.
17836
17837 integer nat
17838
17839 real*8 PI,TWOPI, PIBY2,DEGRAD,RADDEG,CLIGHT,BIG,EMASS,
17840 + EMMU,PMASS,AVO
17841 PARAMETER (PI=3.14159265358979324)
17842 PARAMETER (TWOPI=6.28318530717958648)
17843 PARAMETER (PIBY2=1.57079632679489662)
17844 PARAMETER (DEGRAD=0.0174532925199432958)
17845 PARAMETER (RADDEG=57.2957795130823209)
17846 PARAMETER (CLIGHT=29979245800.)
17847 PARAMETER (BIG=10000000000.)
17848 PARAMETER (EMASS=0.0005109990615)
17849 PARAMETER (EMMU=0.105658387)
17850 PARAMETER (PMASS=0.9382723128)
17851 PARAMETER (AVO=0.60221367)
17852
17853 c PARAMETER (KWBANK=69000,KWWORK=5200)
17854 c COMMON/GCBANK/NZEBRA,GVERSN,ZVERSN,IXSTOR,IXDIV,IXCONS,FENDQ(16)
17855 c + ,LMAIN,LR1,WS(KWBANK)
17856 c DIMENSION IQ(2),Q(2),LQ(8000),IWS(2)
17857 c EQUIVALENCE (Q(1),IQ(1),LQ(9)),(LQ(1),LMAIN),(IWS(1),WS(1))
17858 c EQUIVALENCE (JCG,JGSTAT)
17859
17860 c COMMON/GCCUTS/CUTGAM,CUTELE,CUTNEU,CUTHAD,CUTMUO,BCUTE,BCUTM
17861 c + ,DCUTE,DCUTM ,PPCUTM,TOFMAX,GCUTS(5)
17862
17863 real DCUTE
17864 c+SEQ,GCBANK
17865 c+SEQ,GCCUTS
17866 C
17867 real DENS
17868 real GAM, GAM2, T, TCME, BET2, Y, D, D2, D3, D4, F
17869 real POTI, POTL, FAC, C, X0, X1, AA, X, DEL, XA
17870 real S1,S2
17871 real CON2,CON3,CON4,CON5,CON6
17872 real AJ,ZJ, WJ, WJJ(pQAt)
17873 integer IP
17874 real CONS
17875 DATA CONS/0.153536E-3/
17876 C.
17877 C. ------------------------------------------------------------------
17878 C.
17879 DCUTE=1.0e5
17880 DENS=DensMatDL(nmat)
17881 c JPROB=LQ(JMA-4)
17882 C
17883 GAM=EEL/EMASS + 1.
17884 GAM2=GAM*GAM
17885 T=GAM-1.
17886 DEDX=0.
17887 IF(T.LE.0.)GO TO 99
17888 TCME=DCUTE/EMASS
17889 BET2=1.-1./GAM2
17890 C ------------------------------
17891 IF(CHARGE.GT.0.) THEN
17892 Y=1./(1.+GAM)
17893 D=TCME
17894 IF(T.LT.TCME) D=T
17895 D2=D*D/2.
17896 D3=2.*D2*D/3.
17897 D4=D2*D2
17898 F=LOG(T*D)-BET2*(T+2.*D-Y*(3.*D2
17899 * +Y*(D-D3+Y*(D2-T*D3+D4))))/T
17900 C
17901 ELSE
17902 D=TCME
17903 IF(T.LT.2.*TCME) D=0.5*T
17904 F=-1.-BET2+LOG((T-D)*D)+T/(T-D)
17905 * +(0.5*D*D+(1.+2.*T)*LOG(1.-D/T))/GAM2
17906 ENDIF
17907 C
17908 if(QAtMat(nmat).eq.1)then
17909 POTI=16.E-9*ZAt(AtMat(1,nmat))**0.9
17910 S1=Zat(AtMat(1,nmat))/Aat(AtMat(1,nmat))
17911 else
17912 S1=0.0
17913 S2=0.0
17914 do nat=1,QAtMat(nmat)
17915 AJ=Aat(AtMat(nat,nmat))
17916 WJJ(nat)=WeightAtMat(nat,nmat)*AJ
17917 S1=S1+WJJ(nat)
17918 enddo
17919 do nat=1,QAtMat(nmat)
17920 WJJ(nat)=WJJ(nat)/S1
17921 enddo
17922 S1=0.0
17923 do nat=1,QAtMat(nmat)
17924 ZJ=Zat(AtMat(nat,nmat))
17925 AJ=Aat(AtMat(nat,nmat))
17926 WJ=WJJ(nat)
17927 S1=S1+WJ*ZJ/AJ
17928 S2=S2+WJ*ZJ*LOG(ZJ)/AJ
17929 enddo
17930 POTI=16.E-9*EXP(0.9*S2/S1)
17931 endif
17932
17933 POTL=LOG(POTI/EMASS)
17934 CON2=DENS*S1
17935 FAC=DENS*S1
17936 CON3=1.+2.*LOG(POTI/(28.8E-9*SQRT(CON2)))
17937 C= CON3
17938 C
17939 C Condensed material ?
17940 C (at present that means: DENS.GT.0.05 g/cm**3)
17941 C
17942 IF(DENS.GT.0.05)THEN
17943 IF(POTI.LT.1.E-7)THEN
17944 IF(CON3.LT.3.681)THEN
17945 CON4=0.2
17946 ELSE
17947 CON4=0.326*CON3-1.
17948 ENDIF
17949 CON5=2.
17950 ELSE
17951 IF(CON3.LT.5.215)THEN
17952 CON4=0.2
17953 ELSE
17954 CON4=0.326*CON3-1.5
17955 ENDIF
17956 CON5=3.
17957 ENDIF
17958 ELSE
17959 C
17960 C Gas (T=0 C, P= 1 ATM)
17961 C if T.NE. 0 C and/or P.NE. 1 ATM
17962 C you have to modify the variable X
17963 C X=>X+0.5*LOG((273+T C)/(273*P ATM))
17964 C in the function GDRELE
17965 C ------------------------
17966 C
17967 IF(CON3.LE.12.25)THEN
17968 IP=INT((CON3-10.)/0.5)+1
17969 IF(IP.LT.0) IP=0
17970 IF(IP.GT.4) IP=4
17971 CON4=1.6+0.1*FLOAT(IP)
17972 CON5=4.
17973 ELSE
17974 IF(CON3.LE.13.804)THEN
17975 CON4=2.
17976 CON5=5.
17977 ELSE
17978 CON4=0.326*CON3-2.5
17979 CON5=5.
17980 ENDIF
17981 ENDIF
17982 ENDIF
17983 C
17984 XA=CON3/4.606
17985 CON6=4.606*(XA-CON4)/(CON5-CON4)**3.
17986
17987 X0=CON4
17988 X1=CON5
17989 AA=CON6
17990 C
17991 X=LOG(GAM2-1.)/4.606
17992 DEL=0.
17993 IF(X.GT.X0)THEN
17994 DEL=4.606*X+C
17995 IF(X.LE.X1)DEL=DEL+AA*(X1-X)**3.
17996 ENDIF
17997 C
17998 DEDX=CONS*FAC*(LOG(2.*T+4.)-2.*POTL+F-DEL)/BET2
17999 IF(DEDX.LT.0.)DEDX=0.
18000 C
18001 99 RETURN
18002 END
18003
18004
18005 +DECK,Inidel.
18006 subroutine Inidel
18007 c
18008 c Initialize the delta eleectrons
18009 c
18010 implicit none
18011
18012 c include 'GoEvent.inc'
18013 +SEQ,GoEvent.
18014 c include 'del.inc'
18015 +SEQ,del.
18016
18017 qdel=0
18018 sOverflowDel=0
18019 if(nevt.eq.1)then
18020 qOverflowDel=0
18021 qsOverflowDel=0
18022 endif
18023
18024 end
18025
18026
18027 subroutine WorPridel
18028
18029 implicit none
18030
18031 c include 'GoEvent.inc'
18032 +SEQ,GoEvent.
18033 c include 'del.inc'
18034 +SEQ,del.
18035
18036 c integer i,j
18037
18038 if(nevt.eq.qevt)then
18039
18040 if(qOverflowDel.gt.0)then
18041 write(oo,*)
18042 write(oo,*)' WorPridel: overflow of delta electrons arrays '
18043 write(oo,*)' sOverflowDel qsOverflowDel qOverflowDel'
18044 write(oo,*)sOverflowDel,qsOverflowDel,qOverflowDel
18045 endif
18046
18047 endif
18048
18049 end
18050
18051 subroutine Pridel
18052
18053 c print the delta electrons
18054
18055 implicit none
18056
18057 c include 'GoEvent.inc'
18058 +SEQ,GoEvent.
18059 c include 'del.inc'
18060 +SEQ,del.
18061
18062 integer i,j
18063
18064 if(soo.eq.0)return
18065 write(oo,*)
18066 write(oo,*)' Pridel: delta electron'
18067 write(oo,*)' sOverflowDel qsOverflowDel qOverflowDel'
18068 write(oo,*)sOverflowDel,qsOverflowDel,qOverflowDel
18069
18070 write(oo,*)' qdel= ',qdel
18071 if(qdel.gt.0)then
18072 write(oo,*)
18073 + ' ndel zdel edel nVoldel Stdel ',
18074 + 'Ptdel updel(1) SOdel',
18075 + ' rangepdel rangedel qstep'
18076 write(oo,*)
18077 + ' pntdel(1,i) pntdel(2,i) pntdel(3,i) ',
18078 + ' veldel(1,i) veldel(2,i) veldel(3,i) '
18079 do i=1,qdel
18080 write(oo,
18081 + '(1X,I5,2(1X,e10.5),1(1X,I3),1(1X,I5),3(1X,I3),2(1X,E9.4),I6)')
18082 + i,zdel(i),edel(i),nVoldel(i),Stdel(i),Ptdel(i),
18083 + updel(1,i),
18084 + SOdel(i),rangepdel(i),rangedel(i),qstepdel(i)
18085 write(oo,'(6(1X,e12.5))')(pntdel(j,i),j=1,3),
18086 + (veldel(j,i),j=1,3)
18087 enddo
18088 endif
18089
18090 end
18091 +DECK,treatdel.
18092
18093
18094 subroutine treatdel
18095 c
18096 c make absorbtion af delta electrons
18097 c write it to the cel.inc
18098
18099 implicit none
18100
18101 c include 'GoEvent.inc'
18102 +SEQ,GoEvent.
18103 c include 'hist.inc'
18104 +SEQ,hist.
18105 c include 'del.inc'
18106 +SEQ,del.
18107 c include 'ener.inc'
18108 +SEQ,ener.
18109 c include 'atoms.inc'
18110 +SEQ,atoms.
18111 c include 'matters.inc'
18112 +SEQ,matters.
18113 c include 'crosec.inc'
18114 +SEQ,crosec.
18115 c include 'volume.inc'
18116 +SEQ,volume.
18117 c include 'cel.inc'
18118 +SEQ,cel.
18119 c include 'bdel.inc'
18120 +SEQ,bdel.
18121 c include 'cconst.inc'
18122 +SEQ,cconst.
18123 c include 'hconst.inc'
18124 *** Added TRACK common to select tracing of delta's (RV 21/2/97).
18125 +SEQ,DIMENSIONS.
18126 +SEQ,PARAMETERS.
18127 *** End of modification.
18128 integer id
18129 integer k
18130 integer q
18131 integer j
18132 integer ti
18133 *** Modification for tracking delta's (RV 10/2/97)
18134 INTEGER IFAIL
18135 *** End of modification.
18136 real*8 h
18137 real rra,rrb
18138
18139 c integer cV
18140 integer cSV
18141 integer qn
18142 c real e,rr(4)
18143 integer sact
18144 real v3
18145 c integer s_change_dir, n_change_dir
18146 *
18147 c data n_change_dir/1/
18148 real*8 s
18149 c real mod_add
18150 c real add(3)
18151 c real ranfl
18152 c real bet,p,x
18153 real msig
18154 c real alog,sqrt
18155
18156 real WW,FF
18157
18158 ti=0
18159
18160 c if(srandoff.eq.1)then
18161 c n_change_dir=10000
18162 c endif
18163 c s_change_dir=n_change_dir
18164 c next 3 lines must be done in Inicel called from GoEvent
18165 c do k=1,QSVol
18166 c qcel(k)=0
18167 c enddo
18168
18169 do id=1,qdel ! main loop
18170
18171 c call IniIonen
18172 c write(oo,*)' id=',id
18173 c write(oo,*)' rionener=', rionener
18174
18175 nBdel=id
18176 ti=0
18177
18178
18179 rangBdel=0.0
18180 rangpBdel=0.0
18181 nstepBdel=0
18182 nVolBdel=nVoldel(id)
18183 if(sSensit(nVolBdel) .eq. 0)then
18184 sact=1
18185 else
18186 sact=0
18187 endif
18188 c if(srandoff.eq.1)then
18189 c nVolBdel=6
18190 c eBdel=esimtran
18191 c edel(id)=eBdel
18192 c pntBdel(1)=0.0
18193 c pntBdel(2)=0.0
18194 cc pntBdel(3)=wall1(nVolBdel)+
18195 cc + (wall2(nVolBdel)-wall1(nVolBdel))*0.5
18196 c pntBdel(3)=29.0
18197 c velBdel(1)=0.0
18198 c velBdel(2)=0.0
18199 c velBdel(3)=1.0
18200 c do j=1,3
18201 c pntdel(j,id)=pntBdel(j)
18202 c veldel(j,id)=velBdel(j)
18203 c enddo
18204 c
18205 c else
18206 eBdel=edel(id)
18207 do j=1,3
18208 pntBdel(j)=pntdel(j,id)
18209 velBdel(j)=veldel(j,id)
18210 enddo
18211 if(eBdel.le.2.0*cuteneBdel)then
18212
18213 c call PriBdel(1)
18214
18215 c make the turn if the energy is too small
18216 c the electron must be traced by simple formula
18217 c for range without multiple scatering
18218 c so as it could be sensible
18219 if(eBdel.le.cuteneBdel)then
18220 msig=0.4
18221 else
18222 if(eBdel.le.2.0*cuteneBdel)then
18223 msig=0.2
18224 endif
18225 endif
18226 call lranor(rra,rrb)
18227 TetaBdel=rra*msig
18228 call MakeNewSys(e1Bdel,e2Bdel,e3Bdel,velBdel)
18229 call turnvec(e1Bdel,e2Bdel,e3Bdel,TetaBdel,velBdel)
18230
18231 c call PriBdel(1)
18232
18233 endif
18234 c endif
18235 sgonextBdel=0
18236 sturnBdel=0
18237 sisferBdel=0
18238 iBdel=0
18239 stepBdel=0.0
18240
18241 c call MakeNewSys(e1Bdel,e2Bdel,e3Bdel,velBdel)
18242
18243 if(nVolBdel.eq.0)then
18244 c call lstdelo
18245 go to 20
18246 endif
18247 if(eBdel.le.0.000001)then
18248 c if(eBdel.le.eMinBdel)then
18249 c call lstdelo
18250 go to 20
18251 endif
18252 c if(sMatC(nMatVol(nVolBdel)).eq.0)then
18253 c call lstdelo
18254 c go to 20
18255 c endif
18256
18257 10 continue
18258 *** Moved next statement after CALL SSTEPBDEL (RV 16/2/99)
18259 C nstepBdel=nstepBdel+1
18260 *** End of modification.
18261 c call PriBdel(1)
18262
18263 * if(s_change_dir.eq.1)then
18264 * if(sgonextBdel.eq.0.and.stepBdel.gt.0.0)then
18265 **
18266 c e=eBdel
18267 c cV=nVolBdel
18268 c rr(1)=(1.0E-5/DensMat(nMatVol(cV)))
18269 c + *1.0E4*(e*1.0E3)**1.5
18270 c rr(1)=rr(1)/10000.0
18271 c rr(2)=0.71*(e**1.72)/DensMat(nMatVol(cV))
18272 c rr(3)=0.2115*(Z_Mean(nMatVol(cV))**0.26)*
18273 c + e**(1.265-0.0954*alog(e))/DensMat(nMatVol(cV))
18274 c
18275 c e=e*1000
18276 c rr(4)=1.225e-3*e**1.912/DensMat(nMatVol(cV))
18277 c e=e/1000
18278 c write(oo,*)' rr=',rr
18279 c stop
18280
18281 c bet=1.0-ELMAS*ELMAS/((ELMAS+eBdel)*(ELMAS+eBdel))
18282 c bet=sqrt(bet)
18283 c p=eBdel*eBdel+2.0*ELMAS*eBdel
18284 c p=sqrt(p)
18285 c x=stepBdel/RLenMat(nMatVol(nVolBdel))
18286 c msig=sqrt(2.0)*13.6/(bet*p)*
18287 c + sqrt(x)
18288 *cc msig=sqrt(2.0)*13.6/(bet*p)*
18289 *cc + sqrt(x)*
18290 *cc + (1.0 + 0.20*alog(x))
18291 c write(oo,*)' eBdel,stepBdel=',eBdel,stepBdel
18292 c write(oo,*)' msig=',msig
18293 *
18294 *c call PriBdel(1)
18295 *c write(oo,*)' bet,p=',bet,p
18296 *c write(oo,*)' x,msig=',x,msig
18297 * mod_add=0.1*abs(ranfl())
18298 * if(srandoff.eq.1)then
18299 * mod_add=mod_add*0.001
18300 * endif
18301 * if(mod_add.gt.0.9)mod_add=0.9
18302 * call sfersim(add)
18303 * s=0.0
18304 * do j=1,3
18305 * velBdel(j)=velBdel(j)+mod_add*add(j)
18306 * s=s+velBdel(j)*velBdel(j)
18307 * enddo
18308 * s=sqrt(s)
18309 * do j=1,3
18310 * velBdel(j)=velBdel(j)/s
18311 * enddo
18312 *cc write(oo,*)' next velBdel=',velBdel
18313 * s_change_dir=n_change_dir
18314 *cc irnc=n_change_dir
18315 * endif
18316 * else
18317 * s_change_dir=s_change_dir-1
18318 * endif
18319 *** Modified the following line, original follows (RV 16/2/99).
18320 C call SstepBdel
18321 C if(nVolBdel.eq.0)then ! this is current numbers
18322 C go to 20
18323 C endif
18324 *** New lines, forcing volume search when tracing deltas.
18325 IF(LTREXB)NVOLBDEL=0
18326 CALL SSTEPBDEL
18327 IF(NVOLBDEL.EQ.0)THEN
18328 PRINT *,' !!!!!! TREATD WARNING : Delta electron'//
18329 - ' has left tracking area; delta incomplete.'
18330 GOTO 20
18331 ENDIF
18332 NSTEPBDEL=NSTEPBDEL+1
18333 *** End of modification.
18334
18335 if(sSensit(nVolBdel) .eq. 0)then
18336 c if(sgonextBdel.eq.1)then
18337 sact=1
18338 endif
18339
18340 if(estepBdel.gt.0)then
18341
18342 c if(sMatC(nMatVol(nVolBdel)).eq.0)then
18343 c call lstdelo
18344 c go to 20
18345 c endif
18346 if(srandoff.ne.1)then
18347 if(eBdel.gt.cuteneBdel)then
18348 if(estepBdel.lt.eBdel)then
18349 call lranor(rra,rrb)
18350 if(rra.lt.-2.0)rra=-2.0
18351 if(rra.gt. 2.0)rra= 2.0
18352 estepBdel=estepBdel+0.33333*estepBdel*rra
18353 if(estepBdel.gt.eBdel)estepBdel=eBdel
18354 endif
18355 endif
18356 endif
18357 if(sSensit(nVolBdel).eq.1)then
18358 if(nMatVol(nVolBdel).gt.0)then ! not a vacuum
18359 if(WWW(nMatVol(nVolBdel)).gt.0)then
18360 WW=WWW(nMatVol(nVolBdel))
18361 FF=FFF(nMatVol(nVolBdel))
18362 if(estepBdel.gt.0)then
18363 if(estepBdel.ne.eBdel)then
18364 call lsgcele(estepBdel,WW,FF,q)
18365 else
18366 call lsgcele1(estepBdel,WW,FF,q)
18367 c call lsgcele(estepBdel,WW,FF,q)
18368 endif
18369 if(q.gt.0)then
18370 h=stepBdel/q
18371 cSV=numSensVol(nVolBdel)
18372 c if(cSV.gt.0)then
18373 if((qcel(cSV)+q) .gt. pqcel)then
18374 qOverflowCel(cSV)=qOverflowCel(cSV)+q
18375 if(sOverflowCel(cSV).eq.0)then
18376 qsOverflowCel(cSV)=qsOverflowCel(cSV)+1
18377 sOverflowCel(cSV)=1
18378 endif
18379 else
18380 do k=1,q
18381 qcel(cSV)=qcel(cSV)+1
18382 *** Modification to trace delta's in E and B fields (RV 21/2/97).
18383 IF(LTREXB.AND.LTRDEL)THEN
18384 IF(K.EQ.1)THEN
18385 CALL TRAEXB(pntBdel,velBdel, ! Start
18386 - pntcel(1,qcel(csV),csV),velBdel, ! End
18387 - eBdel,h,IFAIL) ! Energy, step
18388 ELSE
18389 CALL TRAEXB(
18390 - pntcel(1,qcel(csV)-1,csV),velBdel, ! Start
18391 - pntcel(1,qcel(csV),csV),velBdel, ! End
18392 - eBdel-(k-1)*estepBdel/q,h,IFAIL) ! Energy, step
18393 ENDIF
18394 ELSE
18395 do j=1,3
18396 pntcel(j,qcel(cSV),cSV)=
18397 + pntBdel(j)+velBdel(j)*k*h
18398 enddo
18399 ENDIF
18400 *** End of modification.
18401 zcel(qcel(cSV),cSV)=1
18402 Ndelcel(qcel(cSV),cSV)=id
18403 sactcel(qcel(cSV),cSV)=sact
18404 enddo
18405 *** Addition: update the location and reference frame (RV 11/2/97)
18406 IF(LTREXB)THEN
18407 DO J=1,3
18408 npntBdel(j)=pntcel(j,qcel(csV),csV)
18409 ENDDO
18410 call MakeNewSys(e1Bdel,e2Bdel,e3Bdel,velBdel)
18411 ENDIF
18412 *** End of addition.
18413 if(shfillrang.eq.1)then
18414 c make the change only for first and last electrons
18415 s=0.0
18416 qn=q-1
18417 do j=1,3
18418 s = s +
18419 + (pntcel(j,(qcel(cSV)-qn),cSV)
18420 + - pntdel(j,nBdel)) * veldel(j,nBdel)
18421 enddo
18422 if(s.gt.rangpBdel)then
18423 rangpBdel=s
18424 endif
18425 if(q.gt.1)then
18426 s=0.0
18427 do j=1,3
18428 s = s +
18429 + (pntcel(j,qcel(cSV),cSV)
18430 + - pntdel(j,nBdel)) * veldel(j,nBdel)
18431 enddo
18432 if(s.gt.rangpBdel)then
18433 rangpBdel=s
18434 endif
18435 endif
18436 endif
18437 endif
18438 c call Pricel
18439 c if(nevt.eq.17.or.nevt.eq.18)then
18440 c call PriBdel(1)
18441 c write(oo,*)' q=',q,' rangpBdel=',rangpBdel
18442 c endif
18443 endif
18444 endif
18445 endif
18446 endif
18447 endif
18448
18449 endif
18450
18451 do j=1,3
18452 pntBdel(j)=npntBdel(j)
18453 enddo
18454 eBdel=eBdel-estepBdel
18455 rangBdel=rangBdel+stepBdel
18456 * if(shfillrang.eq.1)then
18457 c It is enouph to do at the end of each step!
18458 c It was wrong algorithm becouse
18459 c the electrons are created not on the each step
18460 * s=0.0
18461 * do j=1,3
18462 * s=s+(pntBdel(j)-pntdel(j,nBdel))*veldel(j,nBdel)
18463 * enddo
18464 * if(s.gt.rangpBdel)then
18465 * rangpBdel=s
18466 * endif
18467 * endif
18468 c if(eBdel.le.eMinBdel)then
18469 if(eBdel.le.0.000001)then
18470 c call lstdelo
18471 go to 20
18472 endif
18473 c The treatment of the electric and magnetic field
18474 c Now it will be very preliminary.
18475 c Calculate the actual velocity
18476
18477
18478 if(sturnBdel.eq.1)then
18479 c if(ti.le.1)then
18480 ti=ti+1
18481 v3=velBdel(3)
18482 call TurnBdel
18483 if(sgonextBdel.eq.1)then
18484 if(v3.lt.0.and.velBdel(3).gt.0)then
18485 sgonextBdel=0
18486 else
18487 if(v3.gt.0.and.velBdel(3).lt.0)then
18488 sgonextBdel=0
18489 endif
18490 endif
18491 endif
18492 c endif
18493 endif
18494
18495 go to 10
18496
18497 20 continue
18498
18499 *** Changed (RV 13/5/97).
18500 C call hfill(nh2_ard,rangBdel,edel(id),1.0)
18501 call hfill(nh2_ard,real(rangBdel),edel(id),1.0)
18502 *** End of change.
18503 rangedel(nBdel)=rangBdel
18504 if(shfillrang.eq.1)then
18505 call hfill(nh2_rd,real(rangpBdel),edel(id),1.0)
18506 call hfill(nh1_rd,real(rangpBdel),0.0,1.0)
18507 rangepdel(nBdel)=rangpBdel
18508 endif
18509
18510 qstepdel(nBdel)=nstepBdel
18511
18512 enddo
18513
18514 end
18515
18516
18517
18518 subroutine lsgcele(e,WW,FF,irn)
18519
18520 implicit none
18521
18522 c include 'GoEvent.inc'
18523 +SEQ,GoEvent.
18524 c include 'hconst.inc'
18525 c include 'lsmabs.inc'
18526 real wmabs,fmabs,e,RN,SIGMA,YY,DIMMY,w,wr
18527 real WW,FF
18528 real r
18529 integer irn,i
18530 real ranfl
18531 wmabs=WW
18532 c wmabs=rionener
18533 c wmabs=0.000026
18534 fmabs=FF
18535 c fmabs=0.19
18536 c write(oo,*)' srandoff=',srandoff,' wmabs=',wmabs
18537 if(srandoff.eq.1)then
18538 fmabs=0.0
18539 endif
18540 if(e.gt.0.0)then
18541 RN=E/wmabs
18542 SIGMA=SQRT(fmabs*RN)
18543 CALL LRANOR(YY,DIMMY)
18544 c RN=RN+YY*SIGMA+0.4999
18545 r=YY*SIGMA ! so as to prevent shift
18546 if(r.lt.-RN)then
18547 r=-RN
18548 elseif(r.gt.RN)then
18549 r=RN
18550 endif
18551 c if(r.lt.-1.0)then
18552 c r=-1.0
18553 c elseif(r.gt.1.0)then
18554 c r=1.0
18555 c endif
18556
18557 RN=RN+r
18558 if(rn.le.0.0)then
18559 irn=0
18560 return
18561 endif
18562 i=rn
18563 w=1.0-(rn-i)
18564 wr=ranfl() ! this is very small random.
18565 ! I don't want to swich it off
18566 c write(oo,*)' e,rn,i,w,wr='
18567 c write(oo,*)e,rn,i,w,wr
18568 if(wr.lt.w)then
18569 rn=i
18570 else
18571 rn=i+1
18572 endif
18573 IF(RN.LT.0.0)RN=0.0
18574 else
18575 RN=0.0
18576 endif
18577 irn=rn
18578 end
18579
18580
18581 subroutine lsgcele1(e,WW,FF,irn)
18582
18583 implicit none
18584
18585 c include 'GoEvent.inc'
18586 +SEQ,GoEvent.
18587 c include 'hconst.inc'
18588 c include 'lsmabs.inc'
18589 real wmabs,fmabs,e,RN,SIGMA,YY,DIMMY,w,wr
18590 real WW,FF
18591 real vmabs
18592 real r
18593 integer irn,i
18594 real ranfl
18595 wmabs=WW
18596 c wmabs=rionener
18597 c vmabs=0.000028
18598 c vmabs=wmabs*1.5
18599 c vmabs=wmabs
18600 vmabs=wmabs*0.5
18601 c vmabs=0.0000266
18602 if(e.le.vmabs)then
18603 irn=1
18604 return
18605 endif
18606 c wmabs=0.000026
18607 fmabs=FF
18608 c fmabs=0.19
18609 c write(oo,*)' srandoff=',srandoff
18610 if(srandoff.eq.1)then
18611 fmabs=0.0
18612 endif
18613 if(e.gt.0.0)then
18614 RN=(E-vmabs)/wmabs
18615 SIGMA=SQRT(fmabs*RN)
18616 CALL LRANOR(YY,DIMMY)
18617 c RN=RN+YY*SIGMA+0.4999
18618 r=YY*SIGMA ! so as to prevent shift
18619 if(r.lt.-RN)then
18620 r=-RN
18621 elseif(r.gt.RN)then
18622 r=RN
18623 endif
18624 c if(r.lt.-1.0)then
18625 c r=-1.0
18626 c elseif(r.gt.1.0)then
18627 c r=1.0
18628 c endif
18629
18630 RN=RN+r
18631 if(rn.le.0.0)then
18632 irn=1
18633 return
18634 endif
18635 i=rn
18636 w=1.0-(rn-i)
18637 wr=ranfl() ! this is very small random.
18638 ! I don't want to swich it off
18639 c write(oo,*)' e,rn,i,w,wr='
18640 c write(oo,*)e,rn,i,w,wr
18641 if(wr.lt.w)then
18642 rn=i
18643 else
18644 rn=i+1
18645 endif
18646 IF(RN.LT.0.0)RN=0.0
18647 else
18648 RN=0.0
18649 endif
18650 c IF(RN.LT.1.0)RN=1.0
18651 rn=rn+1
18652 irn=rn
18653 end
18654
18655 +DECK,Inicel.
18656 subroutine Inicel
18657
18658 c Initialize the current electrons
18659
18660 implicit none
18661
18662 c include 'GoEvent.inc'
18663 +SEQ,GoEvent.
18664 c include 'volume.inc'
18665 +SEQ,volume.
18666 c include 'cel.inc'
18667 +SEQ,cel.
18668
18669 integer k
18670
18671 do k=1,QSVol
18672 qcel(k)=0
18673 sOverflowCel(k)=0
18674 enddo
18675
18676 if(nevt.eq.1)then
18677 do k=1,QSVol
18678 qOverflowCel(k)=0
18679 qsOverflowCel(k)=0
18680 enddo
18681 endif
18682
18683 end
18684
18685 subroutine WorPricel
18686
18687 c print the current electrons
18688
18689 implicit none
18690
18691 c include 'GoEvent.inc'
18692 +SEQ,GoEvent.
18693 c include 'volume.inc'
18694 +SEQ,volume.
18695 c include 'cel.inc'
18696 +SEQ,cel.
18697
18698 integer k
18699
18700 if(nevt.eq.qevt)then
18701
18702 do k=1,QSVol
18703 if(qOverflowCel(k).gt.0)then
18704 go to 10
18705 endif
18706 enddo
18707 return
18708
18709 10 continue
18710
18711 write(oo,*)
18712 write(oo,*)' WorPricel: overflow of curren electrons arrays '
18713 write(oo,*)' QSVol=',QSVol
18714 do k=1,QSVol
18715 write(oo,*)' number of lay =',k
18716 write(oo,*)' sOverflowCel qsOverflowCel qOverflowCel'
18717 write(oo,*)sOverflowCel(k),qsOverflowCel(k),qOverflowCel(k)
18718 enddo
18719
18720 endif
18721
18722 end
18723
18724 subroutine Pricel
18725
18726 c print the current electrons
18727
18728 implicit none
18729
18730 c include 'GoEvent.inc'
18731 +SEQ,GoEvent.
18732 c include 'volume.inc'
18733 +SEQ,volume.
18734 c include 'cel.inc'
18735 +SEQ,cel.
18736
18737 integer k,i,j
18738
18739 if(soo.eq.0)return
18740 write(oo,*)
18741 write(oo,*)' Pricel: curren electrons '
18742 write(oo,*)' QSVol=',QSVol
18743 do k=1,QSVol
18744 write(oo,*)' number of lay =',k
18745 write(oo,*)' sOverflowCel qsOverflowCel qOverflowCel'
18746 write(oo,*)sOverflowCel(k),qsOverflowCel(k),qOverflowCel(k)
18747 if(qcel(k).gt.0)then
18748 write(oo,*)' qcel(k)= ',qcel(k)
18749 write(oo,*)' szcel(k)= ',szcel(k)
18750 write(oo,*)
18751 + ' ncel zcel Ndelcel sactcel'
18752 write(oo,*)
18753 + ' pntcel(1,i,k) pntcel(2,i,k) pntcel(3,i,k) '
18754 do i=1,qcel(k)
18755 write(oo,'(i5,1(1X,e12.5),5(1X,I5))')
18756 + i,zcel(i,k),
18757 + Ndelcel(i,k),sactcel(i,k)
18758 write(oo,'(3(1X,e15.8))')(pntcel(j,i,k),j=1,3)
18759 enddo
18760 endif
18761 enddo
18762
18763
18764 end
18765 +DECK,treatcel.
18766 subroutine treatcel
18767 c
18768 c Calculate the total charge
18769 c
18770 implicit none
18771
18772 c include 'volume.inc'
18773 +SEQ,volume.
18774 c include 'cel.inc'
18775 +SEQ,cel.
18776
18777 integer i,j
18778 real s
18779 c real r,cr
18780
18781 do i=1,QSVol
18782
18783 s=0
18784 do j=1,qcel(i)
18785 s=s+zcel(j,i)
18786 enddo
18787 szcel(i)=s
18788 enddo
18789
18790 end
18791 +DECK,SourcePh.
18792
18793
18794 subroutine SourcePhot(pnt,vel,e)
18795 c
18796 c Source of the photons
18797 c
18798 implicit none
18799
18800 c include 'GoEvent.inc'
18801 +SEQ,GoEvent.
18802 c include 'rga.inc'
18803 +SEQ,rga.
18804
18805 real vel(3),e
18806 real*8 pnt(3)
18807 integer i,nv,nqup
18808
18809 nv=0
18810 call VolNumZcoor(pnt(3),vel(3),nv)
18811 if(nv.eq.0)then
18812 write(oo,*)
18813 + ' worning of SourcePhot: the source can not light out of set'
18814 return
18815 endif
18816
18817 if(qrga .eq. pqrga)then
18818 qOverflowrga=qOverflowrga+1
18819 if(sOverflowrga.eq.0)then
18820 qsOverflowrga=qsOverflowrga+1
18821 sOverflowrga=1
18822 endif
18823 else
18824
18825
18826 qrga=qrga+1
18827 erga(qrga)=e
18828 do i=1,3
18829 pntrga(i,qrga)=pnt(i)
18830 velrga(i,qrga)=vel(i)
18831 enddo
18832 nVolrga(qrga)=nv
18833 c Strga(qrga)=10000 in this case it need to settle
18834 c the number of transition volume
18835 c It is used in lsta_abs
18836 Strga(qrga)=1
18837 Ptrga(qrga)=0
18838 do nqup=1,pqup
18839 uprga(nqup,qrga)=0
18840 enddo
18841 SFrga(qrga)=0
18842
18843 endif
18844
18845 end
18846 +DECK,SourceDe.
18847
18848
18849 subroutine SourceDelEl(pnt,vel,e)
18850 c
18851 c Auxiliary generator of delta-electron.
18852 c
18853 implicit none
18854
18855 c include 'GoEvent.inc'
18856 +SEQ,GoEvent.
18857 c include 'del.inc'
18858 +SEQ,del.
18859
18860 real e,vel(3)
18861 real*8 pnt(3)
18862
18863 integer nv,j,nqup
18864 c integer i
18865
18866 nv=0
18867 call VolNumZcoor(pnt(3),vel(3),nv)
18868 if(nv.eq.0)then
18869 write(oo,*)
18870 + ' worning of SourceDelEl: the source can not light out of set'
18871 return
18872 endif
18873
18874
18875 if(qdel .eq. pqdel)then
18876 qOverflowDel=qOverflowDel+1
18877 if(sOverflowDel.eq.0)then
18878 qsOverflowDel=qsOverflowDel+1
18879 sOverflowDel=1
18880 endif
18881 else
18882
18883 qdel=qdel+1
18884 Ptdel(qdel)=0
18885 Stdel(qdel)=1
18886 do nqup=1,pqup
18887 updel(nqup,qdel)=0
18888 enddo
18889 SOdel(qdel)=0
18890 do j=1,3
18891 pntdel(j,qdel)=pnt(j)
18892 enddo
18893 do j=1,3
18894 veldel(j,qdel)=vel(j)
18895 enddo
18896 zdel(qdel)=1
18897 edel(qdel)=e
18898 nVoldel(qdel)=nv
18899 rangepdel(qdel)=0.0
18900 rangedel(qdel)=0.0
18901
18902 endif
18903
18904 end
18905 +DECK,vectors.
18906 c several subroutines for vector algebra
18907 c single accuracy
18908
18909 subroutine GoOldSys(e1,e2,e3,v,ov)
18910 c
18911 c Go to old system
18912 c
18913 implicit none
18914
18915 real e1(3),e2(3),e3(3) ! coordinates of new orts in the old
18916 real v(3) ! vector in the new system
18917 real ov(3) ! vector in the old system
18918 c real s
18919 c integer i
18920
18921 ov(1)=v(1)*e1(1) + v(2)*e2(1) + v(3)*e3(1)
18922 ov(2)=v(1)*e1(2) + v(2)*e2(2) + v(3)*e3(2)
18923 ov(3)=v(1)*e1(3) + v(2)*e2(3) + v(3)*e3(3)
18924
18925 c write(6,*)' GoOldSys'
18926 c write(6,*)' v=',v
18927 c write(6,*)' ov=',ov
18928 c write(6,*)' e1=',e1
18929 c write(6,*)' e2=',e2
18930 c write(6,*)' e3=',e3
18931 c s=0.0
18932 c do i=1,3
18933 c s=s+e1(i)*e1(i)
18934 c enddo
18935 c write(6,*)' abs(e1)=',s
18936 c s=0.0
18937 c do i=1,3
18938 c s=s+e2(i)*e2(i)
18939 c enddo
18940 c write(6,*)' abs(e2)=',s
18941 c s=0.0
18942 c do i=1,3
18943 c s=s+e3(i)*e3(i)
18944 c enddo
18945 c write(6,*)' abs(e3)=',s
18946 c s=0.0
18947 c do i=1,3
18948 c s=s+ov(i)*ov(i)
18949 c enddo
18950 c write(6,*)' abs(ov)=',s
18951
18952
18953 end
18954
18955 subroutine MakeNewSys(e1,e2,e3,v)
18956 c
18957 c Make new system
18958 c
18959 implicit none
18960
18961 real e1(3),e2(3),e3(3) ! coordinates of new orts in the old
18962
18963 real v(3) ! vector (equal)
18964
18965 real s
18966 integer i
18967
18968 do i=1,3
18969 e3(i)=v(i)
18970 enddo
18971 if(e3(2).eq.0.0.and.e3(3).eq.0.0)then
18972 e1(1)=0.0
18973 e1(2)=0.0
18974 e1(3)=-1.0
18975 e2(1)=0.0
18976 e2(2)=1.0
18977 e2(3)=0.0
18978 c write(6,*)' v=',v
18979 c write(6,*)' e1=',e1
18980 c write(6,*)' e2=',e2
18981 c write(6,*)' e3=',e3
18982 return
18983 endif
18984 e2(1)=0.0
18985 e2(2)=e3(3)
18986 e2(3)=-e3(2)
18987 s=0.0
18988 do i=1,3
18989 s=s+e2(i)*e2(i)
18990 enddo
18991 s=sqrt(s)
18992 do i=1,3
18993 e2(i)=e2(i)/s
18994 enddo
18995
18996 e1(1)=e2(2)*e3(3)-e3(2)*e2(3)
18997 e1(2)=e3(1)*e2(3)-e2(1)*e3(3)
18998 e1(3)=e2(1)*e3(2)-e3(1)*e2(2)
18999
19000 s=0.0
19001 do i=1,3
19002 s=s+e1(i)*e1(i)
19003 enddo
19004 s=sqrt(s)
19005 do i=1,3
19006 e1(i)=e1(i)/s
19007 enddo
19008
19009 c write(6,*)' MakeNewSys'
19010 c write(6,*)' v=',v
19011 c write(6,*)' e1=',e1
19012 c write(6,*)' e2=',e2
19013 c write(6,*)' e3=',e3
19014 c s=0.0
19015 c do i=1,3
19016 c s=s+e1(i)*e1(i)
19017 c enddo
19018 c write(6,*)' abs(e1)=',s
19019 c s=0.0
19020 c do i=1,3
19021 c s=s+e2(i)*e2(i)
19022 c enddo
19023 c write(6,*)' abs(e2)=',s
19024 c s=0.0
19025 c do i=1,3
19026 c s=s+e3(i)*e3(i)
19027 c enddo
19028 c write(6,*)' abs(e3)=',s
19029 c s=0.0
19030 c do i=1,3
19031 c s=s+e1(i)*e2(i)
19032 c enddo
19033 c write(6,*)' e1*e2=',s
19034 c s=0.0
19035 c do i=1,3
19036 c s=s+e2(i)*e3(i)
19037 c enddo
19038 c write(6,*)' e2*e3=',s
19039 c s=0.0
19040 c do i=1,3
19041 c s=s+e3(i)*e1(i)
19042 c enddo
19043 c write(6,*)' e3*e1=',s
19044 c s=0.0
19045 c do i=1,3
19046 c s=s+v(i)*v(i)
19047 c enddo
19048 c write(6,*)' abs(v)=',s
19049
19050 end
19051
19052
19053
19054 subroutine Ncirclesim(e1,e2,e3,v)
19055 c
19056 c generate vector with circle simmetry in the system
19057 c around e3 axis
19058 implicit none
19059
19060 real e1(3),e2(3),e3(3) ! coordinates of new orts in the old
19061
19062 real v(3) ! vector (equal)
19063
19064 c real ranfl
19065
19066 real r(3)
19067 c real s
19068 c integer i
19069
19070 call circlesim(r)
19071 c write(6,*)' Ncirclesim'
19072 c s=0.0
19073 c do i=1,3
19074 c s=s+r(i)*r(i)
19075 c enddo
19076 c write(6,*)' s=',s
19077 call GoOldSys(e1,e2,e3,r,v)
19078 c write(6,*)' Ncirclesim'
19079 c s=0.0
19080 c do i=1,3
19081 c s=s+e3(i)*v(i)
19082 c enddo
19083 c write(6,*)' s=',s
19084 c s=0.0
19085 c do i=1,3
19086 c s=s+v(i)*v(i)
19087 c enddo
19088 c write(6,*)' s=',s
19089 c write(6,*)' e3=',e3
19090 c write(6,*)' v=',v
19091
19092
19093 end
19094
19095
19096
19097 subroutine circlesim(v)
19098 c
19099 c generate vector with circle simmetry around e3
19100 c around z axis
19101
19102 implicit none
19103
19104 real v(3) ! vector (equal)
19105
19106 real ranfl
19107
19108 real F
19109
19110 F=3.14159*2.0*ranfl()
19111 v(1)=cos(F)
19112 v(2)=sin(F)
19113 v(3)=0.0
19114
19115 end
19116
19117
19118 subroutine sfersim(r)
19119 c
19120 c generate vector with sferical simmetry
19121 c
19122 implicit none
19123 real r(3)
19124 real costeta,sinteta,F
19125 real RANFL
19126 c real RANFL,COS,SIN,sqrt
19127 C SFERICAL SIMMETRY
19128 costeta=1.0-2.0*RANFL()
19129 sinteta=sqrt(1.0-costeta*costeta)
19130 F=3.14159*2.0*RANFL()
19131 r(1)=COS(F)*sinteta
19132 r(2)=SIN(F)*sinteta
19133 r(3)=costeta
19134
19135 end
19136
19137
19138
19139 subroutine turnvec(e1,e2,e3,teta, v)
19140 c
19141 c turn the vector
19142 c assumed that old vector is along e3 axis
19143 c the angle phi is rundom
19144
19145 implicit none
19146 c include 'cconst.inc'
19147 +SEQ,cconst.
19148
19149 real e1(3),e2(3),e3(3) ! coordinates of current orts in the old
19150
19151 real v(3) ! vector (equal)
19152 real teta
19153 integer n,i
19154 real rad(3),rss
19155 c real sqrt
19156
19157 if(Teta.lt.0.0)Teta=-Teta
19158 if(Teta.gt.4.0*PI)then
19159 n=Teta/(4.0*PI)
19160 Teta=Teta-n*4.0*PI
19161 endif
19162 if(Teta.gt.2.0*PI)then
19163 Teta=4.0*PI-Teta
19164 endif
19165 if(Teta.eq.PI)then
19166 do i=1,3
19167 v(i)=-e3(i)
19168 enddo
19169 elseif(Teta.eq.0.0)then
19170 do i=1,3
19171 v(i)=e3(i)
19172 enddo
19173 else
19174 call Ncirclesim(e1,e2,e3,rad)
19175 rss=tan(Teta)
19176 if(rss.lt.0.0)then
19177 rss=-rss
19178 n=-1
19179 else
19180 n=1
19181 endif
19182 do i=1,3
19183 rad(i)=rad(i)*rss
19184 v(i)=n*e3(i)+rad(i)
19185 enddo
19186 rss=0.0
19187 do i=1,3
19188 rss=rss+v(i)*v(i)
19189 enddo
19190 rss=sqrt(rss)
19191 do i=1,3
19192 v(i)=v(i)/rss
19193 enddo
19194 endif
19195 c write(6,*)' turnvec'
19196 c write(6,*)' teta=',teta
19197 c write(6,*)' e1=',e1
19198 c write(6,*)' e2=',e2
19199 c write(6,*)' e3=',e3
19200 c write(6,*)' v=',v
19201 c rss=0.0
19202 c do i=1,3
19203 c rss=rss+e3(i)*v(i)
19204 c enddo
19205 c rss=acos(rss)
19206 c write(6,*)' rss=',rss
19207
19208 end
19209 +DECK,random.
19210 subroutine Iniranfl
19211 c
19212 c Initialize the random numbers generator
19213 c iranfl is intent for calc. of number of call of geenerator
19214 c It is so as it can be possible to figer out, where the
19215 c new circle starts, if the user knows the period.
19216 c
19217 implicit none
19218
19219 c include 'random.inc'
19220 +SEQ,random.
19221
19222 c real*8 iranfl
19223 c common / comran / iranfl
19224 c save / comran /
19225
19226 iranfl=0
19227
19228 end
19229
19230
19231 function ranfl()
19232 c
19233 c Random numbers generator
19234 c
19235 implicit none
19236 real ranfl,ranf
19237 real x
19238
19239 c include 'random.inc'
19240 +SEQ,random.
19241
19242
19243 c real*8 iranfl
19244 c common / comran / iranfl
19245 c save / comran /
19246
19247
19248 iranfl=iranfl+3
19249 c The several preliminary calls to avoid correlations
19250 c between the previous and the next value.
19251 x=ranf()
19252 x=ranf()
19253 ranfl=ranf() ! CERNLIB
19254
19255 return
19256
19257 end
19258
19259 subroutine randset
19260 c
19261 c set the start point
19262 c
19263 implicit none
19264
19265 c include 'random.inc'
19266 +SEQ,random.
19267
19268 call ranset(rseed)
19269
19270 end
19271
19272 subroutine randget
19273 c
19274 c get the current point
19275 c
19276 implicit none
19277
19278 c include 'random.inc'
19279 +SEQ,random.
19280
19281 call ranget(rseed)
19282
19283 end
19284
19285 subroutine randpri(oo)
19286 c
19287 c print the current point
19288 c
19289 implicit none
19290
19291 integer oo
19292
19293 c include 'random.inc'
19294 +SEQ,random.
19295
19296 write(oo,*)'seed=',seed
19297
19298 end
19299
19300
19301 subroutine Priranfl
19302
19303 c It is called at the end of program
19304
19305 implicit none
19306
19307 c include 'GoEvent.inc'
19308 +SEQ,GoEvent.
19309 c include 'random.inc'
19310 +SEQ,random.
19311
19312 c real*8 iranfl
19313 c common / comran / iranfl
19314 c save / comran /
19315
19316 if(soo.eq.0)return
19317 write(oo,*)
19318 write(oo,*)' Priranfl: iranfl=',iranfl
19319
19320 end
19321
19322
19323
19324 SUBROUTINE LRANOR(A,B)
19325 C.
19326 c Copy of the geant321 routine GRANOR for ranfl generator
19327 C. ******************************************************************
19328 C. * *
19329 C. * To generate 2 numbers A and B following a NORMAL *
19330 C. * distribution (mean=0 sigma=1.) *
19331 C. * Copy of the CERN Library routine RANNOR *
19332 C. * *
19333 C. * ==>Called by : <USER>, many GEANT routines *
19334 C. * Author F.Carminati ********* *
19335 C. * *
19336 C. ******************************************************************
19337 C.
19338 * DIMENSION RNDM(2)
19339 *
19340 * CALL GRNDM(RNDM,2)
19341 Y=ranfl()
19342 Z=ranfl()
19343 X=6.283185*Z
19344 A1=SQRT (-2.0*LOG(Y))
19345 A=A1*SIN (X)
19346 B=A1*COS (X)
19347 RETURN
19348 END
19349
19350 SUBROUTINE LSPOIS (AMU,N,IERROR)
19351 C
19352 c This is modified library routine poissn.
19353 c One or two errors was corrected here.
19354 c
19355 C POISSON GENERATOR
19356 C CODED FROM LOS ALAMOS REPORT LA-5061-MS
19357 C PROB(N)=EXP(-AMU)*AMU**N/FACT(N)
19358 C WHERE FACT(N) STANDS FOR FACTORIAL OF N
19359 C ON RETURN IERROR.EQ.0 NORMALLY
19360 C IERROR.EQ.1 IF AMU.LE.0.
19361 C
19362 SAVE !my correction
19363 DATA AMUOL/-1./
19364 DATA AMAX/100./
19365 c write(6,*)' amu=',amu
19366 IERROR=0 !my correction
19367 IF(AMU.GT.AMAX) GO TO 500
19368 IF(AMU.EQ.AMUOL) GO TO 200
19369 IF(AMU.GT.0.) GO TO 100
19370 C MEAN SHOULD BE POSITIVE
19371 IERROR=1
19372 N = 0
19373 RETURN
19374 C SAVE EXPONENTIAL FOR FURTHER IDENTICAL REQUESTS
19375 100 IERROR=0
19376 AMUOL=AMU
19377 EXPMA=EXP(-AMU)
19378 200 PIR=1.
19379 c write(6,*)' ierror=',ierror
19380 N=-1
19381 300 N=N+1
19382 c PIR=PIR*RNDM(N)
19383 PIR=PIR*ranfl()
19384 IF(PIR.GT.EXPMA) GO TO 300
19385 RETURN
19386 C NORMAL APPROXIMATION FOR AMU.GT.AMAX
19387 500 CALL LRANOR(RAN,DUMMY)
19388 N=RAN*SQRT(AMU)+AMU+.5
19389 RETURN
19390 C ENTRY FOR USER TO SET AMAX, SWITCHOVER POINT TO NORMAL APPROXIMATION
19391 ENTRY lPOISET(AMU)
19392 PRINT 1001,AMU
19393 1001 FORMAT(77H POISSON RANDOM NUMBER GENERATOR TO SWITCH TO NORMAL APP
19394 CROXIMATION ABOVE AMU= ,F12.2)
19395 AMAX=AMU
19396 RETURN
19397 END
19398
19399
19400 SUBROUTINE lHISRAN(Y,N,XLO,XWID,XRAN)
19401
19402 c corrected for working with program HEED
19403
19404 C SUBROUTINE TO GENERATE RANDOM NUMBERS
19405 C ACCORDING TO AN EMPIRICAL DISTRIBUTION
19406 C SUPPLIED BY THE USER IN THE FORM OF A HISTOGRAM
19407 C F. JAMES, MAY, 1976
19408 DIMENSION Y(*)
19409 DATA IERR,NTRY,NXHRAN,NXHPRE/0,3HRAN,3HRAN,3HPRE/
19410 IF(Y(N).EQ.1.0) GOTO 200
19411 WRITE(6,1001) Y(N)
19412 1001 FORMAT('0SUBROUTINE HISRAN FINDS Y(N) NOT EQUAL TO 1.0 Y(N)='
19413 +,E15.6/' ASSUMES USER HAS SUPPLIED HISTOGRAM RATHER THAN CUMUL',
19414 +'ATIVE DISTRIBUTION AND HAS FORGOTTEN TO CALL lHISPRE'/)
19415 NTRY=NXHRAN
19416 GOTO 50
19417 C INITIALIZE HISTOGRAM TO FORM CUMULATIVE DISTRIBUTION
19418 C+SELF,IF=CDC,IF=F4.
19419 C ENTRY lHISPRE
19420 C+SELF,IF=-CDC,-F4.
19421 ENTRY lHISPRE(Y,N)
19422 C+SELF.
19423 NTRY=NXHPRE
19424 50 CONTINUE
19425 YTOT = 0.
19426 DO 100 I= 1, N
19427 IF(Y(I).LT.0.) GOTO 900
19428 YTOT = YTOT + Y(I)
19429 100 Y(I) = YTOT
19430 IF(YTOT.LE.0.) GOTO 900
19431 YINV = 1.0/YTOT
19432 DO 110 I= 1, N
19433 110 Y(I) = Y(I) * YINV
19434 Y(N) = 1.0
19435 IF(NTRY.EQ.NXHPRE) RETURN
19436 C NOW GENERATE RANDOM NUMBER BETWEEN 0 AND ONE
19437 200 CONTINUE
19438 c YR = RNDM(-1)
19439 YR=ranfl()
19440 C AND TRANSFORM IT INTO THE CORRESPONDING X-VALUE
19441 L = LOCATF(Y,N,YR)
19442 IF(L.EQ.0) GOTO 240
19443 IF(L.GT.0) GOTO 250
19444 C USUALLY COME HERE.
19445 L = ABS(L)
19446 XRAN = XLO + XWID * (L +((YR-Y(L))/(Y(L+1)-Y(L))))
19447 RETURN
19448 C POINT FALLS IN FIRST BIN. SPECIAL CASE
19449 240 XRAN = XLO + XWID * (YR/Y(1))
19450 RETURN
19451 C GUARD AGAINST SPECIAL CASE OF FALLING ON EMPTY BIN
19452 250 XRAN = XLO + L * XWID
19453 RETURN
19454 900 CONTINUE
19455 IERR = IERR + 1
19456 IF(IERR.LT.6) WRITE(6,1000)NTRY
19457 IF(L.GT.0) GOTO 250
19458 IF(NTRY.EQ.NXHPRE) RETURN
19459 1000 FORMAT('0ERROR IN INPUT DATA FOR HIS',A3,' VALUES NOT ALL >=0'/)
19460 WRITE(6,1002) (Y(K),K=1,N)
19461 1002 FORMAT(1X,10F13.7)
19462 XRAN = 0.
19463 RETURN
19464 END
19465
19466
19467 +DECK,hist.
19468
19469 subroutine IniHist
19470
19471 c initialize common histograms
19472 c
19473
19474 implicit none
19475
19476 c include 'GoEvent.inc'
19477 +SEQ,GoEvent.
19478 c include 'hist.inc'
19479 +SEQ,hist.
19480 c include 'volume.inc'
19481 +SEQ,volume.
19482
19483
19484 integer nsv
19485 integer imaxhisample
19486 imaxhisample=maxhisample
19487
19488 if(QSVol.le.MaxHistQSVol)then
19489 hQSVol=QSVol
19490 else
19491 hQSVol=MaxHistQSVol
19492 endif
19493
19494
19495 do nsv=1,hQSVol ! circle over the sensitive volumes
19496
19497
19498
19499 CALL HBOOK1(
19500 + nh1_ampK + nsv,
19501 + ' amplitude (KeV)$',
19502 + pqhisampl, 0.0, maxhisampl*1.0e3, 0.0)
19503 ! it is defined in MeV
19504 CALL HBOOK1(
19505 + nh1_ampKR + nsv,
19506 + ' amplitude (KeV)$',
19507 + pqhisampl, 0.0, maxhisampl*1.0e3, 0.0)
19508 ! it is defined in MeV
19509
19510 CALL HBOOK1(
19511 + nh1_ampN+nsv,
19512 + ' amplitude in numbers of conduction electrons$',
19513 + imaxhisample, 0.0, maxhisample, 0.0)
19514
19515
19516
19517 CALL HBOOK1(
19518 + nh1_cdx + nsv,
19519 + ' charge distribution along x$',
19520 + pqh2,-0.02,0.02,0.0)
19521
19522 CALL HBOOK1(
19523 + nh1_cdy + nsv,
19524 + ' charge distribution along y$',
19525 + pqh2,-0.02,0.02,0.0)
19526
19527 CALL HBOOK1(
19528 + nh1_cdz + nsv,
19529 + ' charge distribution along z$',
19530 + pqh2,
19531 + real(wall1(numVolSens(nsv))),
19532 + real(wall2(numVolSens(nsv))),0.0)
19533
19534
19535
19536
19537 enddo
19538
19539
19540
19541
19542 CALL HBOOK2(
19543 + nh2_ard,
19544 + ' Actual range of delta-electron(cm) vs energy(MeV).$',
19545 + pqh,0.0,1.0,
19546 + pqh,0.0,0.002,0.0)
19547 CALL HBOOK2(
19548 + nh2_rd,
19549 + 'Range along initial direction of delta-electron vs energy.$',
19550 + pqh,0.0,0.01,
19551 + pqh,0.0,0.002,0.0)
19552 CALL HBOOK1(
19553 + nh1_rd,
19554 + ' Range along initial direction of delta-electron (cm). $',
19555 + pqh,0.0,0.01,0.0)
19556
19557
19558
19559
19560
19561 end
19562
19563
19564 subroutine FHist
19565
19566 c fill histograms
19567 c
19568
19569 implicit none
19570
19571 c include 'GoEvent.inc'
19572 +SEQ,GoEvent.
19573 c include 'hist.inc'
19574 +SEQ,hist.
19575 c include 'volume.inc'
19576 +SEQ,volume.
19577 c include 'cel.inc'
19578 +SEQ,cel.
19579 c include 'del.inc'
19580 +SEQ,del.
19581 c include 'rga.inc'
19582 +SEQ,rga.
19583 c include 'abs.inc'
19584 +SEQ,abs.
19585 c include 'lsgvga.inc'
19586 +SEQ,lsgvga.
19587 c include 'ener.inc'
19588 +SEQ,ener.
19589 c include 'atoms.inc'
19590 +SEQ,atoms.
19591 c include 'matters.inc'
19592 +SEQ,matters.
19593 c include 'track.inc'
19594 +SEQ,track.
19595
19596 integer nsv,ncel,nv,nm
19597
19598 real ranfl
19599 real r
19600
19601
19602 do nsv=1,hqSVol
19603
19604
19605 nv=numVolSens(nsv)
19606 nm=nMatVol(nv)
19607
19608 call hf1(nh1_ampK + nsv,szcel(nsv)*WWW(nm)*1.0e3,1.0)
19609
19610 r=ranfl()-0.5
19611 r=(szcel(nsv)+r)*WWW(nm)*1.0e3
19612 if(r.lt.0)r=0
19613 call hf1(nh1_ampKR + nsv, r, 1.0)
19614
19615 call hf1(nh1_ampN + nsv,szcel(nsv),1.0)
19616
19617
19618
19619 do ncel=1,qcel(nsv) ! circle on conduction electrons
19620
19621 call hf1(
19622 + nh1_cdx + nsv,
19623 + real(pntcel(1,ncel,nsv)), zcel(ncel,nsv))
19624
19625 call hf1(
19626 + nh1_cdy + nsv,
19627 + real(pntcel(2,ncel,nsv)), zcel(ncel,nsv))
19628
19629 call hf1(
19630 + nh1_cdz + nsv,
19631 + real(pntcel(3,ncel,nsv)), zcel(ncel,nsv))
19632
19633 enddo
19634
19635
19636
19637 enddo
19638
19639
19640
19641 end
19642
19643 SUBROUTINE WHist
19644 C
19645 C-----------------------------------------------------------------
19646 C| |
19647 C| TERMINATION ROUTINE TO PRINT HISTOGRAMS |
19648 C| |
19649 C| |
19650 C| |
19651 C----------------------------------------------------------------|
19652 implicit none
19653
19654 c include 'GoEvent.inc'
19655 +SEQ,GoEvent.
19656 c include 'hist.inc'
19657 +SEQ,hist.
19658
19659 c Integer*4 i,j,k,l,m,n
19660 Integer*4 istat,icycle
19661 C
19662 call hropen(HistLun,'mybook',HistFile,'nq',1024,istat) ! rz file
19663 if (istat.ne.0) go to 999 ! if error
19664 call hcdir('//PAWC',' ') ! root directory in memory
19665 call hcdir('//mybook',' ') ! root directory on disk
19666 CALL HROUT(0,icycle,' ') ! write all on disk
19667 C
19668 CALL HREND('mybook')
19669 C
19670 goto 1000
19671 999 continue
19672 write (oo,100)istat
19673 100 format(1x,//,1x,'*** UGLAST: error of writing, ISTAT= ',i6)
19674 1000 continue
19675 CLOSE(HistLun)
19676 RETURN
19677 END
19678 +QUIT.

  ViewVC Help
Powered by ViewVC 1.1.23