source: PSPA/madxPSPA/src/mad_dynap.c @ 445

Last change on this file since 445 was 430, checked in by touze, 11 years ago

import madx-5.01.00

File size: 4.0 KB
Line 
1#include "madx.h"
2
3static void
4dynap_tables_create(struct in_cmd* cmd)
5  /* creates the dynamic tables for DYNAP execution */
6{
7  int npart = stored_track_start->curr;
8  struct table* t;
9
10  (void)cmd;
11  t = make_table("tracksumm", "tracksumm", tracksumm_table_cols,
12                 tracksumm_table_types, 2*stored_track_start->curr);
13  add_to_table_list(t, table_register);
14  t = make_table("dynap", "dynap", dynap_table_cols, dynap_table_types, 10);
15  add_to_table_list(t, table_register);
16  t = make_table("dynaptune", "dynaptune", dynaptune_table_cols, dynaptune_table_types, npart);
17  add_to_table_list(t, table_register);
18}
19
20// public interface
21
22void
23track_dynap(struct in_cmd* cmd)
24{
25  char rout_name[] = "track_dynap";
26  int e_flag, flag = 2, izero = 0,
27    turns = command_par_value("turns", cmd->clone),
28    npart = 2*stored_track_start->curr;
29  int *ibuf1, *ibuf2, *ibuf3;
30  double orbit[6];
31  double *buf1, *buf2, *buf_dxt, *buf_dyt, *buf3, *buf4, *buf5, *buf6,
32    *buf7, *buf8, *buf9, *buf10, *buf11;
33  struct table* t;
34  int kopt01,kopt02;
35 
36  kopt02=0;
37  kopt01 = get_value("dynap","damp");
38  if (kopt01 == 0) {
39    kopt02=1;
40    fprintf(prt_file, "damp is on\n");
41  }
42  set_option("damp", &kopt02);
43
44  kopt02=0;
45  kopt01 = get_value("dynap","quantum");
46  if (kopt01 == 0) {
47    kopt02=1;
48    fprintf(prt_file, "quantum is on\n");
49  }
50  set_option("quantum", &kopt02);
51
52  if (track_is_on == 0)
53  {
54    warning("track_dynap: no TRACK command seen yet", "ignored");
55    return;
56  }
57  if (npart == 0)
58  {
59    warning("track_dynap: no START command seen yet", "ignored");
60    return;
61  }
62  if (turns < 64)
63  {
64    warning("track_dynap: turns cannot be < 64", "set to 64");
65    turns = 64;
66  }
67  adjust_beam();
68  if (probe_beam) probe_beam = delete_command(probe_beam);
69  probe_beam = clone_command(current_beam);
70  adjust_probe(track_deltap); /* sets correct gamma, beta, etc. */
71  adjust_rfc(); /* sets freq in rf-cavities from probe */
72  zero_double(orbit0, 6);
73  zero_double(oneturnmat, 36);
74  if (get_option("onepass") == 0)
75  {
76    tmrefo_(&izero,orbit0,orbit,oneturnmat);
77    /* closed orbit and one-turn linear transfer map */
78  }
79  dynap_tables_create(cmd);
80  /* allocate buffers */
81  ibuf1 = mymalloc(rout_name,npart*sizeof(int));
82  ibuf2 = mymalloc(rout_name,npart*sizeof(int));
83  ibuf3 = mymalloc(rout_name, current_sequ->n_nodes*sizeof(int));
84  buf1 = mymalloc(rout_name,npart*sizeof(double));
85  buf2 = mymalloc(rout_name,6*npart*sizeof(double));
86  buf_dxt = mymalloc(rout_name,npart*sizeof(double));
87  buf_dyt = mymalloc(rout_name,npart*sizeof(double));
88  buf3 = mymalloc(rout_name,6*npart*sizeof(double));
89  buf4 = mymalloc(rout_name,36*sizeof(double)); /* eigenvectors */
90  buf5 = mymalloc(rout_name,6*npart*(turns+1)*sizeof(double));
91  buf6 = mymalloc(rout_name, current_sequ->n_nodes*sizeof(double));
92  buf7 = mymalloc(rout_name, turns*sizeof(double));
93  buf8 = mymalloc(rout_name, 6*turns*sizeof(double));
94  buf9 = mymalloc(rout_name, 2*turns*sizeof(double));
95  buf10 = mymalloc(rout_name, turns*sizeof(double));
96  buf11 = mymalloc(rout_name, turns*sizeof(double));
97  trrun_(&flag, &turns,orbit0, oneturnmat, ibuf1, ibuf2, buf1, buf2,
98         buf_dxt, buf_dyt, buf3, buf4, buf5, &e_flag, ibuf3, buf6);
99  t = table_register->tables[name_list_pos("tracksumm", table_register->names)];
100  print_table(t);
101  if (e_flag)
102  {
103    warning("track_dynap: particle lost before last turn,", "ignored");
104    return;
105  }
106  dynap_(buf4, buf5, &turns, &npart, buf7, buf8, buf9, buf10, buf11);
107  /*
108    table_register->tables[name_list_pos("dynapsumm", table_register->names)];
109    print_table(t);
110    if (get_option("dynap_dump")) dynap_tables_dump();
111  */
112  /* free buffers */
113  myfree(rout_name, ibuf1); myfree(rout_name, ibuf2);
114  myfree(rout_name, ibuf3); myfree(rout_name, buf1); myfree(rout_name, buf2);
115  myfree(rout_name, buf_dxt); myfree(rout_name, buf_dyt);
116  myfree(rout_name, buf3); myfree(rout_name, buf4); myfree(rout_name, buf5);
117  myfree(rout_name, buf6); myfree(rout_name, buf7); myfree(rout_name, buf8);
118  myfree(rout_name, buf9); myfree(rout_name, buf10);
119  myfree(rout_name, buf11);
120}
121
Note: See TracBrowser for help on using the repository browser.