/[escript]/trunk/finley/src/Util.c
ViewVC logotype

Diff of /trunk/finley/src/Util.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1715 by gross, Thu May 22 09:31:33 2008 UTC revision 1716 by gross, Thu Aug 21 05:03:49 2008 UTC
# Line 520  index_t Finley_Util_cumsum(dim_t N,index Line 520  index_t Finley_Util_cumsum(dim_t N,index
520     #endif     #endif
521     return out;     return out;
522  }  }
523    void Finley_Util_setValuesInUse(const index_t *values, const dim_t numValues, dim_t *numValuesInUse, index_t **valuesInUse, Paso_MPIInfo* mpiinfo)
524    {
525       dim_t i;
526       index_t lastFoundValue=INDEX_T_MIN, minFoundValue, local_minFoundValue, *newValuesInUse=NULL;
527       register index_t itmp;
528       bool_t allFound=FALSE;
529       dim_t nv=0;
530    
531       while (! allFound) {
532           /*
533            *  find smallest value bigger than lastFoundValue
534            */
535            minFoundValue=INDEX_T_MAX;
536            #pragma omp parallel private(local_minFoundValue)
537            {
538                local_minFoundValue=minFoundValue;
539                #pragma omp for private(i,itmp) schedule(static)
540                for (i=0;i< numValues;i++) {
541                   itmp=values[i];
542                   if ((itmp>lastFoundValue) && (itmp<local_minFoundValue)) local_minFoundValue=itmp;
543                }
544                #pragma omp critical
545                minFoundValue=MIN(local_minFoundValue,minFoundValue);
546             }
547             #ifdef PASO_MPI
548             local_minFoundValue=minFoundValue;
549             MPI_Allreduce(&local_minFoundValue,&minFoundValue, 1, MPI_INT, MPI_MAX, mpiinfo->comm );
550             #endif
551    
552             /* if we found a new tag we need to add this too the valuesInUseList */
553    
554             if (minFoundValue < INDEX_T_MAX) {
555                 newValuesInUse=MEMALLOC(nv+1,index_t);
556                 if (*valuesInUse!=NULL) {
557                     memcpy(newValuesInUse,*valuesInUse,sizeof(index_t)*nv);
558                     MEMFREE(*valuesInUse);
559                 }
560                 newValuesInUse[nv]=minFoundValue;
561                 *valuesInUse=newValuesInUse;
562                 newValuesInUse=NULL;
563                 nv++;
564                 lastFoundValue=minFoundValue;
565             } else {
566                 allFound=TRUE;
567             }
568       }
569       *numValuesInUse=nv;
570    }
571    
572    
573  #ifdef PASO_MPI  #ifdef PASO_MPI

Legend:
Removed from v.1715  
changed lines
  Added in v.1716

  ViewVC Help
Powered by ViewVC 1.1.26