/[escript]/trunk/dudley/src/Assemble_CopyElementData.cpp
ViewVC logotype

Diff of /trunk/dudley/src/Assemble_CopyElementData.cpp

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

trunk/finley/src/Assemble_CopyElementData.c revision 1312 by ksteube, Mon Sep 24 06:18:44 2007 UTC branches/domexper/dudley/src/Assemble_CopyElementData.c revision 3199 by jfenwick, Thu Sep 23 06:08:56 2010 UTC
# Line 1  Line 1 
1    
 /* $Id$ */  
   
2  /*******************************************************  /*******************************************************
3   *  *
4   *           Copyright 2003-2007 by ACceSS MNRF  * Copyright (c) 2003-2010 by University of Queensland
5   *       Copyright 2007 by University of Queensland  * Earth Systems Science Computational Center (ESSCC)
6   *  * http://www.uq.edu.au/esscc
7   *                http://esscc.uq.edu.au  *
8   *        Primary Business: Queensland, Australia  * Primary Business: Queensland, Australia
9   *  Licensed under the Open Software License version 3.0  * Licensed under the Open Software License version 3.0
10   *     http://www.opensource.org/licenses/osl-3.0.php  * http://www.opensource.org/licenses/osl-3.0.php
11   *  *
12   *******************************************************/  *******************************************************/
13    
14    
15  /**************************************************************/  /**************************************************************/
16    
# Line 25  Line 24 
24  #include <omp.h>  #include <omp.h>
25  #endif  #endif
26  /******************************************************************************************************/  /******************************************************************************************************/
27    #include "ShapeTable.h"
28    
29    void Dudley_Assemble_CopyElementData(Dudley_ElementFile* elements,escriptDataC* out,escriptDataC* in) {
 void Finley_Assemble_CopyElementData(Finley_ElementFile* elements,escriptDataC* out,escriptDataC* in) {  
30      dim_t n,q, numElements, numQuad;      dim_t n,q, numElements, numQuad;
31      double *in_array,*out_array;      __const double *in_array;
32        double *out_array;
33      dim_t numComps=getDataPointSize(out);      dim_t numComps=getDataPointSize(out);
34      size_t len_size;      size_t len_size;
35    
36      Finley_resetError();      Dudley_resetError();
37      if( elements == NULL )      if( elements == NULL )
38      {      {
39         return;         return;
40      }      }
41    
42      numElements=elements->numElements;      numElements=elements->numElements;
43      if (Finley_Assemble_reducedIntegrationOrder(in)) {      if (Dudley_Assemble_reducedIntegrationOrder(in)) {
44         numQuad=elements->ReferenceElementReducedOrder->numQuadNodes;  //       numQuad=elements->referenceElementSet->referenceElementReducedQuadrature->BasisFunctions->numQuadNodes;
45        numQuad=QuadNums[elements->numDim][0];
46      } else {      } else {
47         numQuad=elements->ReferenceElement->numQuadNodes;  //       numQuad=elements->referenceElementSet->referenceElement->BasisFunctions->numQuadNodes;
48        numQuad=QuadNums[elements->numDim][1];
49    
50      }      }
51    
52      /* check out and in */      /* check out and in */
53      if (numComps!=getDataPointSize(in)) {      if (numComps!=getDataPointSize(in)) {
54         Finley_setError(TYPE_ERROR,"Finley_Assemble_CopyElementData: number of components of input and output Data do not match.");         Dudley_setError(TYPE_ERROR,"Dudley_Assemble_CopyElementData: number of components of input and output Data do not match.");
55      } else if (!numSamplesEqual(in,numQuad,numElements)) {      } else if (!numSamplesEqual(in,numQuad,numElements)) {
56         Finley_setError(TYPE_ERROR,"Finley_Assemble_CopyElementData: illegal number of samples of input Data object");         Dudley_setError(TYPE_ERROR,"Dudley_Assemble_CopyElementData: illegal number of samples of input Data object");
57      } else if (!numSamplesEqual(out,numQuad,numElements)) {      } else if (!numSamplesEqual(out,numQuad,numElements)) {
58         Finley_setError(TYPE_ERROR,"Finley_Assemble_CopyElementData: illegal number of samples of output Data object");         Dudley_setError(TYPE_ERROR,"Dudley_Assemble_CopyElementData: illegal number of samples of output Data object");
59      } else if (!isExpanded(out)) {      } else if (!isExpanded(out)) {
60         Finley_setError(TYPE_ERROR,"Finley_Assemble_CopyElementData: expanded Data object is expected for output data.");         Dudley_setError(TYPE_ERROR,"Dudley_Assemble_CopyElementData: expanded Data object is expected for output data.");
61      }      }
62    
63      /* now we can start */      /* now we can start */
64    
65      if (Finley_noError()) {      if (Dudley_noError()) {
66           if (isExpanded(in)) {           if (isExpanded(in)) {
67               len_size=numComps*numQuad*sizeof(double);               len_size=numComps*numQuad*sizeof(double);
68               # pragma omp parallel for private(n) schedule(static)           requireWrite(out);
69               for (n=0;n<numElements;n++)           #pragma omp parallel private(n)
70                   memcpy(getSampleData(out,n),getSampleData(in,n), len_size);           {
71                   # pragma omp for schedule(static)
72                   for (n=0;n<numElements;n++)
73                     memcpy(getSampleDataRW(out,n),getSampleDataRO(in,n), len_size);
74             }
75           } else {           } else {
76               len_size=numComps*sizeof(double);               len_size=numComps*sizeof(double);
77               # pragma omp parallel for private(q,n,out_array,in_array) schedule(static)           requireWrite(out);
78               for (n=0;n<numElements;n++) {           #pragma omp parallel private(q,n,out_array,in_array)
79                   in_array=getSampleData(in,n);           {
80                   out_array=getSampleData(out,n);                 # pragma omp for schedule(static)
81                   for (n=0;n<numElements;n++) {
82                     in_array=getSampleDataRO(in,n);
83                     out_array=getSampleDataRW(out,n);
84                   for (q=0;q<numQuad;q++) memcpy(out_array+q*numComps,in_array,len_size);                   for (q=0;q<numQuad;q++) memcpy(out_array+q*numComps,in_array,len_size);
85               }                 }
86             }
87           }           }
88      }      }
89      return;      return;

Legend:
Removed from v.1312  
changed lines
  Added in v.3199

  ViewVC Help
Powered by ViewVC 1.1.26