Changeset 493 in PSPA for Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc
- Timestamp:
- Mar 11, 2014, 11:21:43 AM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc
r485 r493 13 13 } 14 14 15 softwareParmela::softwareParmela(string inputFileName,sectionToExecute* sect, dataManager* data) : abstractSoftware(inputFileName, sect, data) 15 // softwareParmela::softwareParmela(string inputFileName,sectionToExecute* sect, dataManager* data) : abstractSoftware(inputFileName, sect, data) 16 // { 17 // nameOfSoftware_ = new nomDeLogiciel("parmela"); 18 // cout << " CONSTRUCTEUR softwareParmela() COMPLET " << endl; 19 // } 20 21 softwareParmela::softwareParmela(string inputFileName,computingBlock* cmpb, dataManager* data) : abstractSoftware(inputFileName, cmpb, data) 16 22 { 17 23 nameOfSoftware_ = new nomDeLogiciel("parmela"); 18 cout << " CONSTRUCTEUR softwareParmela() COMPLET " << endl; 19 // registerElement(nomdElements::RFgun,TBoolOk); 20 // registerElement(nomdElements::drift,TBoolOk); 21 // registerElement(nomdElements::cell,TBoolOk); 22 // registerElement(nomdElements::bend,TBoolOk); 23 // registerElement(nomdElements::soleno,TBoolOk); 24 // registerElement(nomdElements::fit,TBoolIgnore); 25 // registerElement(nomdElements::snapshot,TBoolIgnore); 26 } 27 24 cout << " CONSTRUCTEUR softwareParmela() COMPLET avec COMPUTING BLOCK = " << cmpb << endl; 25 cout << " softwareParmela::CONSTRUCTEUR adresse mamager " << dataManager_ << endl; 26 cout << " softwareParmela::CONSTRUCTEUR adresse GLOBAUX " << dataManager_->getGlobalParameters() << endl; 27 } 28 29 void softwareParmela::setRelativeParmelaElementIndices() { 30 relativeParmelaElementIndices_.clear(); 31 32 relativeParmelaElementIndices_.resize(getComputingBlock()->getNumberOfElements(), -1); 33 cout << " setRelativeParmelaElementIndices() taille a priori : " << relativeParmelaElementIndices_.size() << endl; 34 abstractElement* elPtr = getComputingBlock()->getFirstElement(); 35 bool there_is_rfgun = (elPtr->getNomdElement().getElementType() == nomdElements::RFgun ); 36 37 // unsigned offsetNumElem; 38 // index du premier element de parmela 39 int id; 40 // les elements de parmela sont indexes de 1 Ã max, s'il n'y a pas de rfgun 41 if ( !there_is_rfgun ) { 42 id = 1; 43 // les elements de parmela sont indexes de 0 Ã max, s'il y a un rfgun 44 } else { 45 id = 0; 46 } 47 48 unsigned k; 49 unsigned curseur = 0; 50 // for ( k=numeroDeb_; k <= numeroFin_ ; k++ ) { 51 for ( k = 0; k < getComputingBlock()->getNumberOfElements(); k ++) { 52 abstractElement* elem = getComputingBlock()->getElement(k); 53 cout << " liste PARMELA no absolu " << k << " relatif provisoire " << relativeParmelaElementIndices_.at(curseur) << endl; 54 // if ( elem->is_accepted_by_software(nameOfSoftware_) == TBoolOk ) { 55 56 if ( getNomDeLogiciel()->doAcceptElement(elem->getNomdElement().getElementType()) == TBoolOk ) { 57 relativeParmelaElementIndices_.at(curseur) = id; 58 cout << " mis a " << id << endl; 59 id++; 60 } 61 curseur++; 62 } 63 } 28 64 29 65 30 66 bool softwareParmela::createInputFile(particleBeam* beamBefore, string workingDir) 31 67 { 68 69 cout << " softwareParmela::createInputFile ENTREE " << endl; 32 70 unsigned int k; 33 71 34 //setRelativeParmelaElementIndices();72 setRelativeParmelaElementIndices(); 35 73 string name = workingDir + inputFileName_; 36 74 ofstream outfile; … … 42 80 } 43 81 44 abstractElement* elPtr = getSectionToExecute()->getElements().front(); 82 // abstractElement* elPtr = getSectionToExecute()->getElements().front(); 83 84 abstractElement* elPtr = getComputingBlock()->getFirstElement(); 45 85 double initalKineticEnergy = 0.0; 86 46 87 bool there_is_rfgun = (elPtr->getNomdElement().getElementType() == nomdElements::RFgun ); 47 88 48 89 if ( !there_is_rfgun ) { 49 90 string nameOfInput = workingDir + "parin.input0"; … … 55 96 elPtr->setPhaseStep( dataManager_->getGlobalParameters()->getIntegrationStep() ); 56 97 initalKineticEnergy = elPtr->getInitialKineticEnergy(); 57 // les elements de parmela sont indexes de 0 Ã max, s'il y a un rfgun 58 } 59 98 } 99 60 100 outfile << "TITLE" << endl; 61 101 outfile << " titre provisoire " << endl; 62 102 outfile << "RUN /n0=1 /ip=999 /freq=" << dataManager_->getGlobalParameters()->getFrequency() << " /z0=0.0 /W0=" << initalKineticEnergy << " /itype=1" << endl; 63 103 outfile << "OUTPUT 0" << endl; 104 105 unsigned int premier = 0 ; 64 106 if ( there_is_rfgun ) { 65 107 outfile << elementsData(elPtr->parametersToSoftware()); 108 premier++; 66 109 } else { 67 110 outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl; 68 111 } 69 70 // retrouver le sector !! 71 for ( k =1; k < getSectionToExecute()->getElements().size(); k++) 112 113 for ( k =premier++; k < getComputingBlock()->getNumberOfElements(); k++) 72 114 { 73 outfile << elementsData(get SectionToExecute()->getElements()[k]->parametersToSoftware());74 } 75 115 outfile << elementsData(getComputingBlock()->getElement(k)->parametersToSoftware()); 116 } 117 76 118 outfile << "ZOUT" << endl; 77 119 outfile << "START /wt=0.0 /dwt=" << dataManager_->getGlobalParameters()->getIntegrationStep() << " /nsteps=" << dataManager_->getGlobalParameters()->getNbSteps() << " nsc=" << dataManager_->getGlobalParameters()->getScPeriod() << " /nout=10" << endl; … … 121 163 122 164 unsigned curseur; 123 for ( unsigned int k=0; k < get SectionToExecute()->getElements().size() ; k++ ) {124 abstractElement* elem = get SectionToExecute()->getElements()[k];165 for ( unsigned int k=0; k < getComputingBlock()->getNumberOfElements() ; k++ ) { 166 abstractElement* elem = getComputingBlock()->getElement(k); 125 167 if ( elem == NULL ) { 126 168 dataManager_->consoleMessage(" softwareParmela::buildBeamAfterElements : null pointer on element " ); … … 129 171 130 172 curseur = k; 131 cout << " softwareParmela::buildBeamAfterElements : type element " << getSectionToExecute()->getElements()[curseur]->getNomdElement().getElementType() << endl; 132 if (!(nameOfSoftware_->doAcceptElement(getSectionToExecute()->getElements()[curseur]->getNomdElement().getElementType()) == TBoolOk)) { 133 134 cout << " softwareParmela::buildBeamAfterElements ELEMENT ETRANGER " << endl; 135 // if ( relativeParmelaElementIndices_.at(curseur) < 0 ) { 173 cout << " softwareParmela::buildBeamAfterElements : type element " << getComputingBlock()->getElement(curseur)->getNomdElement().getElementType() << endl; 174 175 176 // if (!(nameOfSoftware_->doAcceptElement(getComputingBlock()->getElements()[curseur]->getNomdElement().getElementType()) == TBoolOk)) { 177 178 if ( relativeParmelaElementIndices_.at(curseur) < 0 ) { 136 179 137 180 // si l'element doit etre ignore de parmela, on renvoie sur le diag precedent … … 149 192 double freq= dataManager_->getGlobalParameters()->getFrequency(); 150 193 unsigned numeroParmel; 151 //numeroParmel = (unsigned)relativeParmelaElementIndices_.at(curseur);152 numeroParmel = curseur;153 cout << " lecture PARMELA el no absolu " << k << " numero relatif " << numeroParmel << " nom " << elem->getNomdElement().getExpandedName() << endl;194 numeroParmel = (unsigned)relativeParmelaElementIndices_.at(curseur); 195 // numeroParmel = curseur; 196 cout << " lecture PARMELA el no relativement absolu " << k << " numero relatif " << numeroParmel << " nom " << elem->getNomdElement().getExpandedName() << endl; 154 197 // lecture sortie parmela 155 198 if(!beamFromParmela(workingDir,numeroParmel,freq,centroid,refPart,particles))
Note: See TracChangeset
for help on using the changeset viewer.