/[escript]/trunk/esys2/bruce/src/Bruce/Bruce.cpp
ViewVC logotype

Diff of /trunk/esys2/bruce/src/Bruce/Bruce.cpp

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

revision 152 by jgs, Thu Sep 22 01:55:00 2005 UTC revision 153 by jgs, Tue Oct 25 01:51:20 2005 UTC
# Line 91  Bruce::checkParameters() Line 91  Bruce::checkParameters()
91      m_n2=1;      m_n2=1;
92    }    }
93    
94      // reorder vectors and point counts according to point counts
95    
96    //    //
97    // domains in 3d space    // domains in 3d space
98    if (m_origin.size()==3) {    if (m_origin.size()==3) {
# Line 418  Bruce::setToX(escript::Data& out) const Line 420  Bruce::setToX(escript::Data& out) const
420    
421        int sampleNo=0;        int sampleNo=0;
422        DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);        DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
       sampleNo++;  
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
423    
424      } else if (dim==1) {      } else if (dim==1) {
425    
426        // Bruce domains in 1d space        // Bruce domains in 1d space
427    
       int sampleNo=0;  
428        for (int i=0; i<m_n0; i++) {        for (int i=0; i<m_n0; i++) {
429            int sampleNo=i;
430          DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);          DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
431          sampleData[0] = m_origin[0] + m_v0[0]*i;          sampleData[0] = m_origin[0] + m_v0[0]*i;
         sampleNo++;  
       }  
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
432        }        }
433    
434      } else if (dim==2) {      } else if (dim==2) {
435    
436        // Bruce domains in 2d space        // Bruce domains in 2d space
437    
       int sampleNo=0;  
438        for (int i=0; i<m_n0; i++) {        for (int i=0; i<m_n0; i++) {
439          for (int j=0; j<m_n1; j++) {          for (int j=0; j<m_n1; j++) {
440              int sampleNo=(m_n1*i)+j;
441            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
442            for (int d=0; d<dim; d++) {            for (int d=0; d<dim; d++) {
443              sampleData[d] = m_origin[d] + m_v0[d]*i + m_v1[d]*j;              sampleData[d] = m_origin[d] + m_v0[d]*i + m_v1[d]*j;
444            }            }
           sampleNo++;  
445          }          }
446        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
447    
448      } else if (dim==3) {      } else if (dim==3) {
449    
450        // Bruce domains in 3d space        // Bruce domains in 3d space
451    
       int sampleNo=0;  
452        for (int i=0; i<m_n0; i++) {        for (int i=0; i<m_n0; i++) {
453          for (int j=0; j<m_n1; j++) {          for (int j=0; j<m_n1; j++) {
454            for (int k=0; k<m_n2; k++) {            for (int k=0; k<m_n2; k++) {
455                int sampleNo=(m_n1*m_n2*i)+(m_n2*j)+k;
456              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
457              for (int d=0; d<dim; d++) {              for (int d=0; d<dim; d++) {
458                sampleData[d] = m_origin[d] + m_v0[d]*i + m_v1[d]*j + m_v2[d]*k;                sampleData[d] = m_origin[d] + m_v0[d]*i + m_v1[d]*j + m_v2[d]*k;
459              }              }
             sampleNo++;  
460            }            }
461          }          }
462        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
463    
464      }      }
465    
# Line 505  Bruce::setToX(escript::Data& out) const Line 483  Bruce::setToX(escript::Data& out) const
483        // Bruce domains in 1d space        // Bruce domains in 1d space
484    
485        int n0max=m_n0-1;        int n0max=m_n0-1;
       int sampleNo=0;  
486        if (isZero(m_v0)) {        if (isZero(m_v0)) {
487          stringstream temp;          stringstream temp;
488          temp << "Error - Invalid function space type: "          temp << "Error - Invalid function space type: "
# Line 513  Bruce::setToX(escript::Data& out) const Line 490  Bruce::setToX(escript::Data& out) const
490          throw BruceException(temp.str());          throw BruceException(temp.str());
491        } else {        } else {
492          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
493              int sampleNo=i;
494            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
495            sampleData[0] = m_origin[0] + m_v0[0]*(i + 0.5);            sampleData[0] = m_origin[0] + m_v0[0]*(i + 0.5);
           sampleNo++;  
496          }          }
497        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
498    
499      } else if (dim==2) {      } else if (dim==2) {
500    
# Line 530  Bruce::setToX(escript::Data& out) const Line 502  Bruce::setToX(escript::Data& out) const
502    
503        int n0max=m_n0-1;        int n0max=m_n0-1;
504        int n1max=m_n1-1;        int n1max=m_n1-1;
       int sampleNo=0;  
505        if (isZero(m_v0)) {        if (isZero(m_v0)) {
506          stringstream temp;          stringstream temp;
507          temp << "Error - Invalid function space type: "          temp << "Error - Invalid function space type: "
# Line 538  Bruce::setToX(escript::Data& out) const Line 509  Bruce::setToX(escript::Data& out) const
509          throw BruceException(temp.str());          throw BruceException(temp.str());
510        } else if (isZero(m_v1)) {        } else if (isZero(m_v1)) {
511          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
512              int sampleNo=i;
513            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
514            for (int d=0; d<dim; d++) {            for (int d=0; d<dim; d++) {
515              sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5);              sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5);
516            }            }
           sampleNo++;  
517          }          }
518        } else {        } else {
519          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
520            for (int j=0; j<n1max; j++) {            for (int j=0; j<n1max; j++) {
521                int sampleNo=(n1max*i)+j;
522              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
523              for (int d=0; d<dim; d++) {              for (int d=0; d<dim; d++) {
524                sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5) + m_v1[d]*(j + 0.5);                sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5) + m_v1[d]*(j + 0.5);
525              }              }
             sampleNo++;  
526            }            }
527          }          }
528        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
529    
530      } else if (dim==3) {      } else if (dim==3) {
531    
# Line 568  Bruce::setToX(escript::Data& out) const Line 534  Bruce::setToX(escript::Data& out) const
534        int n0max=m_n0-1;        int n0max=m_n0-1;
535        int n1max=m_n1-1;        int n1max=m_n1-1;
536        int n2max=m_n2-1;        int n2max=m_n2-1;
       int sampleNo=0;  
537        if (isZero(m_v0)) {        if (isZero(m_v0)) {
538          stringstream temp;          stringstream temp;
539          temp << "Error - Invalid function space type: "          temp << "Error - Invalid function space type: "
# Line 576  Bruce::setToX(escript::Data& out) const Line 541  Bruce::setToX(escript::Data& out) const
541          throw BruceException(temp.str());          throw BruceException(temp.str());
542        } else if (isZero(m_v1)) {        } else if (isZero(m_v1)) {
543          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
544              int sampleNo=i;
545            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
546            for (int d=0; d<dim; d++) {            for (int d=0; d<dim; d++) {
547              sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5);              sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5);
548            }            }
           sampleNo++;  
549          }          }
550        } else if (isZero(m_v2)) {        } else if (isZero(m_v2)) {
551          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
552            for (int j=0; j<n1max; j++) {            for (int j=0; j<n1max; j++) {
553                int sampleNo=(n1max*i)+j;
554              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
555              for (int d=0; d<dim; d++) {              for (int d=0; d<dim; d++) {
556                sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5) + m_v1[d]*(j + 0.5);                sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5) + m_v1[d]*(j + 0.5);
557              }              }
             sampleNo++;  
558            }            }
559          }          }
560        } else {        } else {
561          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
562            for (int j=0; j<n1max; j++) {            for (int j=0; j<n1max; j++) {
563              for (int k=0; k<n2max; k++) {              for (int k=0; k<n2max; k++) {
564                  int sampleNo=(n1max*n2max*i)+(n2max*j)+k;
565                DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);                DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
566                for (int d=0; d<dim; d++) {                for (int d=0; d<dim; d++) {
567                  sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5) + m_v1[d]*(j + 0.5) + m_v2[d]*(k + 0.5);                  sampleData[d] = m_origin[d] + m_v0[d]*(i + 0.5) + m_v1[d]*(j + 0.5) + m_v2[d]*(k + 0.5);
568                }                }
               sampleNo++;  
569              }              }
570            }            }
571          }          }
572        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToX: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
573    
574      }      }
575    
# Line 655  Bruce::setToSize(escript::Data& out) con Line 615  Bruce::setToSize(escript::Data& out) con
615    // ensure shape of data-points in supplied Data object matches the    // ensure shape of data-points in supplied Data object matches the
616    // shape needed to store the size of each data-point in this Bruce domain    // shape needed to store the size of each data-point in this Bruce domain
617    std::vector<int> dataShape = out.getDataPointShape();    std::vector<int> dataShape = out.getDataPointShape();
618      // this check should be satisfied by Data objects passed to setToSize, but
619      // FunctionSpace::getSize() seems to create an object which is larger than
620      // this... either way, this method can deal with this
621    /*
622    if (dataShape.size()!=1 || dataShape[0]!=1) {    if (dataShape.size()!=1 || dataShape[0]!=1) {
623      stringstream temp;      stringstream temp;
624      temp << "Error - Incompatible shape Data object supplied to Bruce::setToSize";      temp << "Error - Incompatible shape Data object supplied to Bruce::setToSize";
625      throw BruceException(temp.str());      throw BruceException(temp.str());
626    }    }
627    */
628    
629    double dp_size;    double dp_size;
630    
# Line 678  Bruce::setToSize(escript::Data& out) con Line 643  Bruce::setToSize(escript::Data& out) con
643        int sampleNo=0;        int sampleNo=0;
644        DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);        DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
645        sampleData[0] = dp_size;        sampleData[0] = dp_size;
       sampleNo++;  
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
646    
647      } else if (dim==1) {      } else if (dim==1) {
648    
# Line 691  Bruce::setToSize(escript::Data& out) con Line 650  Bruce::setToSize(escript::Data& out) con
650    
651        dp_size = m_v0[0];        dp_size = m_v0[0];
652    
       int sampleNo=0;  
653        for (int i=0; i<m_n0; i++) {        for (int i=0; i<m_n0; i++) {
654            int sampleNo=i;
655          DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);          DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
656          sampleData[0] = dp_size;          sampleData[0] = dp_size;
         sampleNo++;  
       }  
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
657        }        }
658    
659      } else if (dim==2) {      } else if (dim==2) {
# Line 711  Bruce::setToSize(escript::Data& out) con Line 664  Bruce::setToSize(escript::Data& out) con
664        double y = m_v0[1] + m_v1[1];        double y = m_v0[1] + m_v1[1];
665        dp_size = sqrt(pow(x,2)+pow(y,2));        dp_size = sqrt(pow(x,2)+pow(y,2));
666    
       int sampleNo=0;  
667        for (int i=0; i<m_n0; i++) {        for (int i=0; i<m_n0; i++) {
668          for (int j=0; j<m_n1; j++) {          for (int j=0; j<m_n1; j++) {
669              int sampleNo=(m_n1*i)+j;
670            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
671            sampleData[0] = dp_size;            sampleData[0] = dp_size;
           sampleNo++;  
672          }          }
673        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
674    
675      } else if (dim==3) {      } else if (dim==3) {
676    
# Line 734  Bruce::setToSize(escript::Data& out) con Line 681  Bruce::setToSize(escript::Data& out) con
681        double z = m_v0[2] + m_v1[2] + m_v2[2];        double z = m_v0[2] + m_v1[2] + m_v2[2];
682        dp_size = sqrt(pow(x,2)+pow(y,2)+pow(z,2));        dp_size = sqrt(pow(x,2)+pow(y,2)+pow(z,2));
683    
       int sampleNo=0;  
684        for (int i=0; i<m_n0; i++) {        for (int i=0; i<m_n0; i++) {
685          for (int j=0; j<m_n1; j++) {          for (int j=0; j<m_n1; j++) {
686            for (int k=0; k<m_n2; k++) {            for (int k=0; k<m_n2; k++) {
687                int sampleNo=(m_n1*m_n2*i)+(m_n2*j)+k;
688              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
689              sampleData[0] = dp_size;              sampleData[0] = dp_size;
             sampleNo++;  
690            }            }
691          }          }
692        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
693    
694      }      }
695    
# Line 774  Bruce::setToSize(escript::Data& out) con Line 715  Bruce::setToSize(escript::Data& out) con
715        dp_size = m_v0[0];        dp_size = m_v0[0];
716    
717        int n0max=m_n0-1;        int n0max=m_n0-1;
       int sampleNo=0;  
718        if (isZero(m_v0)) {        if (isZero(m_v0)) {
719          stringstream temp;          stringstream temp;
720          temp << "Error - Invalid function space type: "          temp << "Error - Invalid function space type: "
# Line 782  Bruce::setToSize(escript::Data& out) con Line 722  Bruce::setToSize(escript::Data& out) con
722          throw BruceException(temp.str());          throw BruceException(temp.str());
723        } else {        } else {
724          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
725              int sampleNo=i;
726            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
727            sampleData[0] = dp_size;            sampleData[0] = dp_size;
           sampleNo++;  
728          }          }
729        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
730    
731      } else if (dim==2) {      } else if (dim==2) {
732    
# Line 803  Bruce::setToSize(escript::Data& out) con Line 738  Bruce::setToSize(escript::Data& out) con
738    
739        int n0max=m_n0-1;        int n0max=m_n0-1;
740        int n1max=m_n1-1;        int n1max=m_n1-1;
       int sampleNo=0;  
741        if (isZero(m_v0)) {        if (isZero(m_v0)) {
742          stringstream temp;          stringstream temp;
743          temp << "Error - Invalid function space type: "          temp << "Error - Invalid function space type: "
# Line 811  Bruce::setToSize(escript::Data& out) con Line 745  Bruce::setToSize(escript::Data& out) con
745          throw BruceException(temp.str());          throw BruceException(temp.str());
746        } else if (isZero(m_v1)) {        } else if (isZero(m_v1)) {
747          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
748              int sampleNo=i;
749            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
750            sampleData[0] = dp_size;            sampleData[0] = dp_size;
           sampleNo++;  
751          }          }
752        } else {        } else {
753          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
754            for (int j=0; j<n1max; j++) {            for (int j=0; j<n1max; j++) {
755                int sampleNo=(n1max*i)+j;
756              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
757              sampleData[0] = dp_size;              sampleData[0] = dp_size;
             sampleNo++;  
758            }            }
759          }          }
760        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
761    
762      } else if (dim==3) {      } else if (dim==3) {
763    
# Line 842  Bruce::setToSize(escript::Data& out) con Line 771  Bruce::setToSize(escript::Data& out) con
771        int n0max=m_n0-1;        int n0max=m_n0-1;
772        int n1max=m_n1-1;        int n1max=m_n1-1;
773        int n2max=m_n2-1;        int n2max=m_n2-1;
       int sampleNo=0;  
774        if (isZero(m_v0)) {        if (isZero(m_v0)) {
775          stringstream temp;          stringstream temp;
776          temp << "Error - Invalid function space type: "          temp << "Error - Invalid function space type: "
# Line 850  Bruce::setToSize(escript::Data& out) con Line 778  Bruce::setToSize(escript::Data& out) con
778          throw BruceException(temp.str());          throw BruceException(temp.str());
779        } else if (isZero(m_v1)) {        } else if (isZero(m_v1)) {
780          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
781              int sampleNo=i;
782            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);            DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
783            sampleData[0] = dp_size;            sampleData[0] = dp_size;
           sampleNo++;  
784          }          }
785        } else if (isZero(m_v2)) {        } else if (isZero(m_v2)) {
786          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
787            for (int j=0; j<n1max; j++) {            for (int j=0; j<n1max; j++) {
788                int sampleNo=(n1max*i)+j;
789              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);              DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
790              sampleData[0] = dp_size;              sampleData[0] = dp_size;
             sampleNo++;  
791            }            }
792          }          }
793        } else {        } else {
794          for (int i=0; i<n0max; i++) {          for (int i=0; i<n0max; i++) {
795            for (int j=0; j<n1max; j++) {            for (int j=0; j<n1max; j++) {
796              for (int k=0; k<n2max; k++) {              for (int k=0; k<n2max; k++) {
797                  int sampleNo=(n2max*n1max*i)+(n1max*j)+k;
798                DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);                DataAbstract::ValueType::value_type* sampleData = out.getSampleData(sampleNo);
799                sampleData[0] = dp_size;                sampleData[0] = dp_size;
               sampleNo++;  
800              }              }
801            }            }
802          }          }
803        }        }
       if (sampleNo!=numSamples) {  
         stringstream temp;  
         temp << "Bruce::setToSize: Didn't iterate across correct number of samples.";  
         throw BruceException(temp.str());  
       }  
804    
805      }      }
806    
# Line 916  Bruce::operator!=(const AbstractDomain& Line 839  Bruce::operator!=(const AbstractDomain&
839    return !(operator==(other));    return !(operator==(other));
840  }  }
841    
842    int
843    Bruce::getTagFromSampleNo(int functionSpaceCode, int sampleNo) const
844    {
845      return 0;
846    }
847    
848    int
849    Bruce::getReferenceNoFromSampleNo(int functionSpaceCode, int sampleNo) const
850    {
851      return 0;
852    }
853    
854  bool  bool
855  Bruce::isZero(DimVec vec)  Bruce::isZero(DimVec vec)
856  {  {

Legend:
Removed from v.152  
changed lines
  Added in v.153

  ViewVC Help
Powered by ViewVC 1.1.26