From 656378664b9696e748438fccfb5d1c83e673b431 Mon Sep 17 00:00:00 2001 From: nadolski <nadolski@9a6e40ed-f3a0-4838-9b4a-bf418f78e88d> Date: Tue, 28 Sep 2010 16:39:08 +0000 Subject: [PATCH] Add parameters for parameter file --- tracy/tools/soltracy.cc | 49 +++++++-- tracy/tracy/inc/read_script.h | 25 ++++- tracy/tracy/inc/soleillib.h | 4 +- tracy/tracy/src/read_script.cc | 195 ++++++++++++++++++++++----------- tracy/tracy/src/soleillib.cc | 22 ++-- tracy/tracy/src/t2lat.cc | 2 +- 6 files changed, 201 insertions(+), 96 deletions(-) diff --git a/tracy/tools/soltracy.cc b/tracy/tools/soltracy.cc index 22e7101..e7443e1 100644 --- a/tracy/tools/soltracy.cc +++ b/tracy/tools/soltracy.cc @@ -42,7 +42,13 @@ extern bool freq_map; /************************************************************************ start read in files and flags *************************************************************************/ - read_script(argv[1], true); + if (argc > 1){ + read_script(argv[1], true);} + else{ + fprintf(stdout, "Not enough parameters\nSyntax is program parameterfile\n"); + return 1; + } + /************************************************************************ @@ -63,7 +69,7 @@ extern bool freq_map; DefineChNoU20(); // using vacuum chamber setting but without undulator U20 else if (ReadChamberFlag == true) ReadCh(chamber_file); /* read vacuum chamber from a file "Apertures.dat" , soleil version*/ - PrintCh(); + PrintCh(); // print chamber into chamber.out // compute tunes by tracking (should be the same as by DA) @@ -120,15 +126,13 @@ extern bool freq_map; if (MultipoleFlag == true ){ if (ThinsextFlag ==true){ fprintf(stdout, "\n Setting Multipoles for lattice with thin sextupoles \n"); - Multipole_thinsext(); /* for thin sextupoles */ - + Multipole_thinsext(fic_hcorr,fic_vcorr,fic_skew); /* for thin sextupoles */ Ring_GetTwiss(chroma=true, 0.0); /* Compute and get Twiss parameters */ printglob(); } else{ fprintf(stdout, "\n Setting Multipoles for lattice with thick sextupoles \n"); - Multipole_thicksext(); /* for thick sextupoles */ - + Multipole_thicksext(fic_hcorr,fic_vcorr,fic_skew); /* for thick sextupoles */ Ring_GetTwiss(chroma=true, 0.0); /* Compute and get Twiss parameters */ printglob(); } @@ -137,7 +141,10 @@ extern bool freq_map; if (FmapFlag == true){ if (ChamberFlag == true ){ if (ExperimentFMAFlag == true) - fmap(40,12,258,-20e-3,5e-3,0.0,true); // for experimental + fmap( _FmapFlag_nxpoint, _FmapFlag_nypoint, + _FmapFlag_nturn, _FmapFlag_xmax, _FmapFlag_ymax, + _FmapFlag_delta, _FmapFlag_diffusion); + //fmap(40,12,258,-20e-3,5e-3,0.0,true); // for experimental if (DetailedFMAFlag == true) fmap(100,50,1026,20e-3,5e-3,0.0,true); } @@ -153,18 +160,36 @@ extern bool freq_map; fmap(200,100,1026,-32e-3,7e-3,0.0,true); } + // MOMENTUM ACCEPTANCE if (MomentumAccFlag == true){ - MomentumAcceptance(1L, 108L, 0.01, 0.05, 100L, -0.01, -0.05, 100L); + MomentumAcceptance( + _MomentumAccFlag_istart, _MomentumAccFlag_istop, + _MomentumAccFlag_deltaminp, _MomentumAccFlag_deltamaxp, _MomentumAccFlag_nstepp, + _MomentumAccFlag_deltaminn, _MomentumAccFlag_deltamaxn, _MomentumAccFlag_nstepn); + // MomentumAcceptance(1L, 108L, 0.01, 0.05, 100L, -0.01, -0.05, 100L); } - // computes Tuneshift with amplitudes - if (TuneShiftFlag == true){ + // computes TuneShift with amplitudes + if (AmplitudeTuneShiftFlag == true){ if (ChamberFlag == true ){ - NuDx(31L,21L,516L,0.025,0.005,dP); - NuDp(31L,1026L,0.06); + NuDx(_AmplitudeTuneShift_nxpoint, + _AmplitudeTuneShift_nypoint, _AmplitudeTuneShift_nturn, + _AmplitudeTuneShift_xmax, _AmplitudeTuneShift_ymax, + _AmplitudeTuneShift_delta); + //NuDx(31L,21L,516L,0.025,0.005,dP); } else{ NuDx(50L,30L,516L,0.035,0.02,dP); + } + + } + if (EnergyTuneShiftFlag == true){ + if (ChamberFlag == true ){ + NuDp(_EnergyTuneShift_npoint, + _EnergyTuneShift_nturn, _EnergyTuneShift_deltamax); + //NuDp(31L,1026L,0.06); + } + else{ NuDp(31L,1026L,0.06); } diff --git a/tracy/tracy/inc/read_script.h b/tracy/tracy/inc/read_script.h index 8640d90..e61574c 100644 --- a/tracy/tracy/inc/read_script.h +++ b/tracy/tracy/inc/read_script.h @@ -1,10 +1,31 @@ /* global flag, used in script_read() and main() for read the input from script*/ extern bool TuneTracFlag; extern bool ChromTracFlag ; + extern bool FmapFlag , ExperimentFMAFlag, DetailedFMAFlag; -extern bool TuneShiftFlag ; -extern bool ErrorCouplingFlag ; extern bool CouplingFlag ; +extern long _FmapFlag_nxpoint, _FmapFlag_nypoint, _FmapFlag_nturn; +extern double _FmapFlag_xmax, _FmapFlag_ymax, _FmapFlag_delta; +extern bool _FmapFlag_diffusion; + +extern bool AmplitudeTuneShiftFlag; +extern long _AmplitudeTuneShift_nxpoint, _AmplitudeTuneShift_nypoint; +extern long _AmplitudeTuneShift_nturn; +extern double _AmplitudeTuneShift_xmax, _AmplitudeTuneShift_ymax, _AmplitudeTuneShift_delta; + +extern bool EnergyTuneShiftFlag; +extern long _EnergyTuneShift_npoint, _EnergyTuneShift_nturn; +extern double _EnergyTuneShift_deltamax; + + extern bool MomentumAccFlag ; +extern long _MomentumAccFlag_istart, _MomentumAccFlag_istop, + _MomentumAccFlag_nstepn, _MomentumAccFlag_nstepp; +extern double _MomentumAccFlag_deltaminn, _MomentumAccFlag_deltamaxn; +extern double _MomentumAccFlag_deltaminp, _MomentumAccFlag_deltamaxp; + +extern bool ErrorCouplingFlag ; extern bool CouplingFlag ; + +extern char fic_hcorr[max_str],fic_vcorr[max_str], fic_skew[max_str]; extern bool MultipoleFlag , ThinsextFlag ; extern bool FitTuneFlag ; extern double targetnux , targetnuz ; extern bool FitChromFlag ; extern double targetksix, targetksiz ; diff --git a/tracy/tracy/inc/soleillib.h b/tracy/tracy/inc/soleillib.h index 18b5073..99adb4f 100644 --- a/tracy/tracy/inc/soleillib.h +++ b/tracy/tracy/inc/soleillib.h @@ -30,8 +30,8 @@ void PhasePortrait(double x0,double px0,double z0, double pz0, double delta0, do double end, long Nb, long Nbtour, int num); void PhasePortrait2(long pos,double x0,double px0,double z0, double pz0, double delta0, double ctau, double end, long Nb, long Nbtour, int num); -void Multipole_thicksext(void); -void Multipole_thinsext(void); +void Multipole_thicksext(char const *fic_hcorr, char const *fic_vcorr, char const *fic_skew); +void Multipole_thinsext(char const *fic_hcorr, char const *fic_vcorr, char const *fic_skew); void MomentumAcceptance(long deb, long fin, double ep_min, double ep_max, long nstepp, double em_min, double em_max, long nstepm); void ReadCh(const char *AperFile); diff --git a/tracy/tracy/src/read_script.cc b/tracy/tracy/src/read_script.cc index 9bc3ad5..8b184df 100644 --- a/tracy/tracy/src/read_script.cc +++ b/tracy/tracy/src/read_script.cc @@ -26,15 +26,36 @@ Jianfeng Zhang 07/10 soleil ****************************************************************************/ - /* global flag, used in script_read() and main() for read the input from script*/ bool TuneTracFlag = false; bool ChromTracFlag = false; + bool FmapFlag = false, ExperimentFMAFlag = false, DetailedFMAFlag = false; -bool TuneShiftFlag = false; +long _FmapFlag_nxpoint=31L, _FmapFlag_nypoint=21L, _FmapFlag_nturn=516L; +double _FmapFlag_xmax=0.025, _FmapFlag_ymax=0.005, _FmapFlag_delta=0.0; +bool _FmapFlag_diffusion = true; + +bool AmplitudeTuneShiftFlag = false; +long _AmplitudeTuneShift_nxpoint=31L; long _AmplitudeTuneShift_nypoint=21L; +long _AmplitudeTuneShift_nturn=516L; double _AmplitudeTuneShift_xmax=0.025; +double _AmplitudeTuneShift_ymax=0.005, _AmplitudeTuneShift_delta=0.0; + +bool EnergyTuneShiftFlag = false; +long _EnergyTuneShift_npoint=31L; long _EnergyTuneShift_nturn=516L; +double _EnergyTuneShift_deltamax=0.06; + bool ErrorCouplingFlag = false; bool CouplingFlag = false; + bool MomentumAccFlag = false; +long _MomentumAccFlag_istart=1L, _MomentumAccFlag_istop=108L, + _MomentumAccFlag_nstepn=100L, _MomentumAccFlag_nstepp=100L; +double _MomentumAccFlag_deltaminn=0.01, _MomentumAccFlag_deltamaxn=0.05; +double _MomentumAccFlag_deltaminp=0.01, _MomentumAccFlag_deltamaxp=0.05; + bool MultipoleFlag = false, ThinsextFlag = false; + +char fic_hcorr[max_str],fic_vcorr[max_str], fic_skew[max_str]; + bool FitTuneFlag = false; double targetnux = 0, targetnuz = 0; bool FitChromFlag = false; double targetksix = 0, targetksiz = 0; bool ChamberFlag = false, ChamberNoU20Flag = false, ReadChamberFlag = false; @@ -49,22 +70,24 @@ bool TouschekFlag = false, IBSFlag = false, TousTrackFlag = false; char chamber_file[max_str]; +#define OLD_LATTICE + /* Read script */ void read_script(const char *param_file_name, bool rd_lat) { - char str[max_str]; - char line[max_str], name[max_str]; - char lat_file[max_str]; + char str[max_str]="voidstring", dummy[max_str]="voidstring"; + char line[max_str]="voidline", name[max_str]="voidname"; + char lat_file[max_str]="voidlattice"; FILE *inf; - const bool prt = true; // for debugging printout each line of input file - long int LineNum=0; + const bool prt = false; // for debugging printout each line of input file + long int LineNum=0L; char full_param_file_name[max_str]; char lat_FileName[max_str]; //bool TuneTracFlag; char *pch; - char dummy[max_str]; + // Manipulation of the parameter file strcpy(dummy, param_file_name); pch = strstr (dummy,".prm"); // search for extension .prm /* remove additional .prm if exist */ @@ -73,13 +96,11 @@ void read_script(const char *param_file_name, bool rd_lat) sprintf(full_param_file_name,"%s.prm",dummy); if (prt) printf("\n reading in script file: %s\n",full_param_file_name); + // inf = file_read(full_param_file_name); - // read param file - strcpy(lat_file, ""); - strcpy(chamber_file, ""); - - while (fgets(line, max_str, inf) != NULL) { + // read line by line parameter file + while (fgets(line, max_str, inf) != NULL) { if(prt) printf("cfg: %s",line); @@ -97,20 +118,18 @@ void read_script(const char *param_file_name, bool rd_lat) sscanf(line, "%*s %s", lat_file); sprintf(lat_FileName, "%s%s", in_dir, lat_file); if(rd_lat) { - // #ifdef OLD_LATTICE + #ifdef OLD_LATTICE fprintf(stderr, "Reading lattice"); Read_Lattice(lat_FileName); - // #else - // fprintf(stderr, "Reading lattice with new parser\n"); - // sprintf(lat_FileName, "%s%s.lat", in_dir, lat_file); - // parse_lattice_flat(lat_FileName, "new.flat"); - // fprintf(stderr, "Parse the lattice into new.flat\n"); - // rdmfile("new.flat"); - // sprintf(lat_FileName, "%s%s", in_dir, lat_file); - // #endif - - // #ifdef DEBUG - // #endif + #else + /* fprintf(stderr, "Reading lattice with new parser\n"); + sprintf(lat_FileName, "%s%s.lat", in_dir, lat_file); + parse_lattice_flat(lat_FileName, "new.flat"); + fprintf(stderr, "Parse the lattice into new.flat\n"); + rdmfile("new.flat"); + sprintf(lat_FileName, "%s%s", in_dir, lat_file); +*/ + #endif } } @@ -122,6 +141,39 @@ void read_script(const char *param_file_name, bool rd_lat) } /* read in bool flags */ + else if (strcmp("ChamberFlag", name) == 0){ + sscanf(line, "%*s %s", str); + if(strcmp(str, "true") == 0) + ChamberFlag = true; + else if(strcmp(str, "false") == 0) + ChamberFlag = false; + else { + printf("set boolean flag true or false for ChamberFlag \n" ); + exit_(1); + } + } + else if (strcmp("ChamberNoU20Flag", name) == 0){ + sscanf(line, "%*s %s", str); + if(strcmp(str, "true") == 0) + ChamberNoU20Flag = true; + else if(strcmp(str, "false") == 0) + ChamberNoU20Flag = false; + else { + printf("set boolean flag true or false for ChamberNoU20Flag \n"); + exit_(1); + } + } + else if (strcmp("ReadChamberFlag", name) == 0){ + sscanf(line, "%*s %s", str); + if(strcmp(str, "true") == 0) + ReadChamberFlag = true; + else if(strcmp(str, "false") == 0) + ReadChamberFlag = false; + else { + printf("set boolean flag true or false for ReadChamberFlag \n"); + exit_(1); + } + } else if (strcmp("globval.quad_fringe", name) == 0){ sscanf(line, "%*s %s", str); if(strcmp(str, "true") == 0) @@ -155,6 +207,7 @@ void read_script(const char *param_file_name, bool rd_lat) exit_(1); } } + // FMA else if (strcmp("FmapFlag", name) == 0){ sscanf(line, "%*s %s", str); if(strcmp(str, "true") == 0) @@ -167,7 +220,11 @@ void read_script(const char *param_file_name, bool rd_lat) } } else if (strcmp("ExperimentFMAFlag", name) == 0){ - sscanf(line, "%*s %s", str); + strcpy(dummy, ""); + sscanf(line, "%*s %s %ld %ld %ld %lf %lf %lf %s", str, + &_FmapFlag_nxpoint, &_FmapFlag_nypoint, + &_FmapFlag_nturn, &_FmapFlag_xmax, &_FmapFlag_ymax, + &_FmapFlag_delta, dummy); if(strcmp(str, "true") == 0) ExperimentFMAFlag = true; else if(strcmp(str, "false") == 0) @@ -176,6 +233,14 @@ void read_script(const char *param_file_name, bool rd_lat) printf("set boolean flag true or false for ExperimentFMAFlag \n"); exit_(1); } + if(strcmp(dummy, "true") == 0) + _FmapFlag_diffusion = true; + else if(strcmp(dummy, "false") == 0) + _FmapFlag_diffusion = false; + else { + printf("set boolean flag true or false for Diffusion (value is %s) \n", dummy); + exit_(1); + } } else if (strcmp("DetailedFMAFlag", name) == 0){ sscanf(line, "%*s %s", str); @@ -188,14 +253,29 @@ void read_script(const char *param_file_name, bool rd_lat) exit_(1); } } - else if (strcmp("TuneShiftFlag", name) == 0){ - sscanf(line, "%*s %s", str); + else if (strcmp("AmplitudeTuneShiftFlag", name) == 0){ + sscanf(line, "%*s %s %ld %ld %ld %lf %lf %lf", str, &_AmplitudeTuneShift_nxpoint, + &_AmplitudeTuneShift_nypoint, &_AmplitudeTuneShift_nturn, + &_AmplitudeTuneShift_xmax, &_AmplitudeTuneShift_ymax, + &_AmplitudeTuneShift_delta); + if(strcmp(str, "true") == 0) + AmplitudeTuneShiftFlag = true; + else if(strcmp(str, "false") == 0) + AmplitudeTuneShiftFlag = false; + else { + printf("set boolean flag true or false for AmplitudeTuneShiftFlag \n"); + exit_(1); + } + } + else if (strcmp("EnergyTuneShiftFlag", name) == 0){ + sscanf(line, "%*s %s %ld %ld %lf", str, &_EnergyTuneShift_npoint, + &_EnergyTuneShift_nturn, &_EnergyTuneShift_deltamax); if(strcmp(str, "true") == 0) - TuneShiftFlag = true; + EnergyTuneShiftFlag = true; else if(strcmp(str, "false") == 0) - TuneShiftFlag = false; + EnergyTuneShiftFlag = false; else { - printf("set boolean flag true or false for TuneShiftFlag \n"); + printf("set boolean flag true or false for EnergyTuneShiftFlag \n"); exit_(1); } } @@ -222,7 +302,11 @@ void read_script(const char *param_file_name, bool rd_lat) } } else if (strcmp("MomentumAccFlag", name) == 0){ - sscanf(line, "%*s %s", str); + sscanf(line, "%*s %s %ld %ld %lf %lf %ld %lf %lf %ld", str, + &_MomentumAccFlag_istart, &_MomentumAccFlag_istop, + &_MomentumAccFlag_deltaminp, &_MomentumAccFlag_deltamaxp, &_MomentumAccFlag_nstepp, + &_MomentumAccFlag_deltaminn, &_MomentumAccFlag_deltamaxn, &_MomentumAccFlag_nstepn + ); if(strcmp(str, "true") == 0) MomentumAccFlag = true; else if(strcmp(str, "false") == 0) @@ -253,6 +337,18 @@ void read_script(const char *param_file_name, bool rd_lat) printf("set boolean flag true or false for ThinsextFlag \n"); exit_(1); } + } + else if (strcmp("fic_hcorr", name) == 0){// read of h-correctors for multipoles + sscanf(line, "%*s %s", str); + sprintf(fic_hcorr,"%s", str); + } + else if (strcmp("fic_vcorr", name) == 0){// read of v-correctors for multipoles + sscanf(line, "%*s %s", str); + sprintf(fic_vcorr,"%s", str); + } + else if (strcmp("fic_skew", name) == 0){// read of skew quads for multipoles + sscanf(line, "%*s %s", str); + sprintf(fic_skew,"%s", str); } else if (strcmp("FitTuneFlag", name) == 0){ sscanf(line, "%*s %s %lf %lf", str,&targetnux,&targetnuz); @@ -276,40 +372,7 @@ void read_script(const char *param_file_name, bool rd_lat) exit_(1); } } - else if (strcmp("ChamberFlag", name) == 0){ - sscanf(line, "%*s %s", str); - if(strcmp(str, "true") == 0) - ChamberFlag = true; - else if(strcmp(str, "false") == 0) - ChamberFlag = false; - else { - printf("set boolean flag true or false for ChamberFlag \n" ); - exit_(1); - } - } - else if (strcmp("ChamberNoU20Flag", name) == 0){ - sscanf(line, "%*s %s", str); - if(strcmp(str, "true") == 0) - ChamberNoU20Flag = true; - else if(strcmp(str, "false") == 0) - ChamberNoU20Flag = false; - else { - printf("set boolean flag true or false for ChamberNoU20Flag \n"); - exit_(1); - } - } - else if (strcmp("ReadChamberFlag", name) == 0){ - sscanf(line, "%*s %s", str); - if(strcmp(str, "true") == 0) - ReadChamberFlag = true; - else if(strcmp(str, "false") == 0) - ReadChamberFlag = false; - else { - printf("set boolean flag true or false for ReadChamberFlag \n"); - exit_(1); - } - } - else if (strcmp("GirderErrorFlag", name) == 0){ + else if (strcmp("GirderErrorFlag", name) == 0){ sscanf(line, "%*s %s", str); if(strcmp(str, "true") == 0) GirderErrorFlag = true; diff --git a/tracy/tracy/src/soleillib.cc b/tracy/tracy/src/soleillib.cc index 76f60aa..d4b598b 100644 --- a/tracy/tracy/src/soleillib.cc +++ b/tracy/tracy/src/soleillib.cc @@ -600,10 +600,10 @@ void ReadCh(const char *AperFile) char line[max_str], Name1[max_str], Name2[max_str]; int Fnum1=0, Fnum2=0, Kidnum1=0, Kidnum2=0, k1=0, k2=0; int i=0, LineNum=0; - double dxmin, dxmax, dymin, dymax; // min and max x and apertures + double dxmin=0.0, dxmax=0.0, dymin=0.0, dymax=0.0; // min and max x and apertures FILE *fp; - bool prt = true; + bool prt = false; fp = file_read(AperFile); @@ -629,7 +629,7 @@ void ReadCh(const char *AperFile) else { /* read the vacuum chamber between section */ - Fnum1 = ElemIndex(Name1); + Fnum1 = ElemIndex(Name1); Fnum2 = ElemIndex(Name2); if(Fnum1>0 && Fnum2>0) { /* if element Name1 is defined before elment Name2, give error message*/ @@ -1302,7 +1302,7 @@ void NuDp(long Nb, long Nbtour, double emax) fprintf(outf,"# TRACY III -- %s -- %s \n", fic, asctime2(newtime)); fprintf(outf,"# dP/P fx fz xcod pxcod zcod pzcod\n"); - fprintf(stdout,"# dP/P fx fz xcod pxcod zcod pzcod\n"); + if (trace) fprintf(stdout,"# dP/P fx fz xcod pxcod zcod pzcod\n"); if (Nb <= 1L) fprintf(stdout,"NuDp: Error Nb=%ld\n",Nb); @@ -1331,10 +1331,12 @@ void NuDp(long Nb, long Nbtour, double emax) //~ getcod(dp, lastpos); // get cod for printout findcod(dp); + fprintf(outf,"%14.6e %14.6e %14.6e %14.6e %14.6e %14.6e %14.6e\n", dp, nux1,nuz1, globval.CODvect[0], globval.CODvect[1], globval.CODvect[2], globval.CODvect[3]); - fprintf(stdout,"%14.6e %14.6e %14.6e %14.6e %14.6e %14.6e %14.6e\n", + + if (trace) fprintf(stdout,"%14.6e %14.6e %14.6e %14.6e %14.6e %14.6e %14.6e\n", dp, nux1,nuz1, globval.CODvect[0], globval.CODvect[1], globval.CODvect[2], globval.CODvect[3]); } @@ -1774,7 +1776,7 @@ void Enveloppe(double x, double px, double y, double py, double dp, double nturn Copy from Tracy II. ****************************************************************************/ -void Multipole_thicksext(void) +void Multipole_thicksext(char const *fic_hcorr, char const *fic_vcorr, char const *fic_skew) { int i = 0; int ndip = 0, /* Number of dipoles */ @@ -1814,9 +1816,6 @@ void Multipole_thicksext(void) double theta = 0.0, brho = 0.0, conv = 0.0 ; FILE *fi; - char const *fic_hcorr="//home/nadolski/codes/tracy/maille/soleil/corh.txt"; - char const *fic_vcorr="/home/nadolski/codes/tracy/maille/soleil/corv.txt"; - char const *fic_skew ="/home/nadolski/codes/tracy/maille/soleil/corqt.txt"; /*********************************************************/ @@ -2643,7 +2642,7 @@ d file */ ****************************************************************************/ -void Multipole_thinsext(void) +void Multipole_thinsext(char const *fic_hcorr, char const *fic_vcorr, char const *fic_skew) { int i = 0; int ndip = 0, /* Number of dipoles */ @@ -2680,9 +2679,6 @@ void Multipole_thinsext(void) FILE *fi; - const char fic_hcorr[] = "hcor.dat"; - const char fic_vcorr[] = "vcor.dat"; - const char fic_skew[] = "vcor.dat"; /*********************************************************/ printf("Enter multipole ... \n"); diff --git a/tracy/tracy/src/t2lat.cc b/tracy/tracy/src/t2lat.cc index f290913..190b69f 100644 --- a/tracy/tracy/src/t2lat.cc +++ b/tracy/tracy/src/t2lat.cc @@ -4291,7 +4291,7 @@ void PrintResult(struct LOC_Lattice_Read *LINK) none Comments: - modify strcmp t strncmp, now can read parts of the element name to get the element index. + modify strcmp to strncmp, now can read parts of the element name to get the element index. ****************************************************************************/ long ElemIndex(const char *name) -- GitLab