Ignore:
Timestamp:
Mar 11, 2014, 11:21:43 AM (10 years ago)
Author:
lemeur
Message:

refection generale des secteurs et applications de softwares (suite)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • Interface_Web/trunk/pspaWT/sources/controler/src/softwareParmela.cc

    r485 r493  
    1313}
    1414
    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
     21softwareParmela::softwareParmela(string inputFileName,computingBlock* cmpb, dataManager* data) : abstractSoftware(inputFileName, cmpb, data)
    1622{
    1723  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
     29void 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}
    2864
    2965
    3066bool softwareParmela::createInputFile(particleBeam* beamBefore, string workingDir)
    3167{
     68
     69  cout << " softwareParmela::createInputFile ENTREE " << endl;
    3270  unsigned int k;
    3371
    34 //  setRelativeParmelaElementIndices();
     72  setRelativeParmelaElementIndices();
    3573  string name = workingDir + inputFileName_;
    3674  ofstream outfile;
     
    4280  }
    4381 
    44   abstractElement* elPtr = getSectionToExecute()->getElements().front();
     82  //  abstractElement* elPtr = getSectionToExecute()->getElements().front();
     83
     84  abstractElement* elPtr = getComputingBlock()->getFirstElement();
    4585  double initalKineticEnergy = 0.0;
     86
    4687  bool there_is_rfgun = (elPtr->getNomdElement().getElementType() == nomdElements::RFgun );
    47  
     88
    4889  if ( !there_is_rfgun ) {
    4990    string nameOfInput = workingDir + "parin.input0";
     
    5596    elPtr->setPhaseStep( dataManager_->getGlobalParameters()->getIntegrationStep() );
    5697    initalKineticEnergy = elPtr->getInitialKineticEnergy();
    57     // les elements de parmela sont indexes de 0 à max, s'il y a un rfgun
    58   }
    59  
     98  }
     99
    60100  outfile << "TITLE" << endl;
    61101  outfile << " titre provisoire " << endl;
    62102  outfile << "RUN /n0=1 /ip=999 /freq=" << dataManager_->getGlobalParameters()->getFrequency() << "  /z0=0.0 /W0=" << initalKineticEnergy << "  /itype=1" << endl;
    63103  outfile << "OUTPUT 0" << endl;
     104
     105  unsigned int premier = 0 ;
    64106  if ( there_is_rfgun ) {
    65107    outfile << elementsData(elPtr->parametersToSoftware());
     108    premier++;
    66109  } else {
    67110    outfile << "INPUT 0 /NP=" << beamBefore->getNbParticles() << endl;
    68111  }
    69  
    70  // retrouver le sector !!
    71   for ( k =1; k < getSectionToExecute()->getElements().size(); k++)
     112
     113  for ( k =premier++; k < getComputingBlock()->getNumberOfElements(); k++)
    72114    {
    73       outfile << elementsData(getSectionToExecute()->getElements()[k]->parametersToSoftware());
    74     }
    75    
     115      outfile << elementsData(getComputingBlock()->getElement(k)->parametersToSoftware());
     116    }
     117 
    76118  outfile << "ZOUT" << endl;
    77119  outfile << "START /wt=0.0 /dwt=" << dataManager_->getGlobalParameters()->getIntegrationStep() << "  /nsteps=" << dataManager_->getGlobalParameters()->getNbSteps() << "  nsc=" << dataManager_->getGlobalParameters()->getScPeriod() << "  /nout=10" << endl;
     
    121163
    122164  unsigned curseur;
    123   for ( unsigned int k=0; k < getSectionToExecute()->getElements().size() ; k++ ) {
    124     abstractElement* elem = getSectionToExecute()->getElements()[k];
     165  for ( unsigned int k=0; k < getComputingBlock()->getNumberOfElements() ; k++ ) {
     166    abstractElement* elem = getComputingBlock()->getElement(k);
    125167      if ( elem == NULL ) {
    126168        dataManager_->consoleMessage(" softwareParmela::buildBeamAfterElements : null pointer on element " );
     
    129171
    130172    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 ) {
    136179
    137180        // si l'element doit etre ignore de parmela, on renvoie sur le diag precedent
     
    149192          double freq= dataManager_->getGlobalParameters()->getFrequency();
    150193          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;
    154197        // lecture sortie parmela
    155198        if(!beamFromParmela(workingDir,numeroParmel,freq,centroid,refPart,particles))
Note: See TracChangeset for help on using the changeset viewer.