/[escript]/branches/domexper/dudley/src/Assemble_PDE.c
ViewVC logotype

Diff of /branches/domexper/dudley/src/Assemble_PDE.c

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

trunk/finley/src/Assemble_PDE.c revision 1352 by matt, Thu Nov 22 03:43:28 2007 UTC branches/domexper/dudley/src/Assemble_PDE.c revision 3090 by jfenwick, Wed Aug 11 00:51:28 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 43  Line 42 
42    
43  #include "Assemble.h"  #include "Assemble.h"
44  #include "Util.h"  #include "Util.h"
45  #include "escript/blocktimer.h"  #include "esysUtils/blocktimer.h"
46  #ifdef _OPENMP  #ifdef _OPENMP
47  #include <omp.h>  #include <omp.h>
48  #endif  #endif
# Line 51  Line 50 
50    
51  /**************************************************************/  /**************************************************************/
52    
53  void Finley_Assemble_PDE(Finley_NodeFile* nodes,Finley_ElementFile* elements,Paso_SystemMatrix* S, escriptDataC* F,  void Dudley_Assemble_PDE(Dudley_NodeFile* nodes,Dudley_ElementFile* elements,Paso_SystemMatrix* S, escriptDataC* F,
54               escriptDataC* A, escriptDataC* B, escriptDataC* C, escriptDataC* D, escriptDataC* X, escriptDataC* Y ) {               escriptDataC* A, escriptDataC* B, escriptDataC* C, escriptDataC* D, escriptDataC* X, escriptDataC* Y ) {
55    
56    bool_t reducedIntegrationOrder=FALSE;    bool_t reducedIntegrationOrder=FALSE;
# Line 60  void Finley_Assemble_PDE(Finley_NodeFile Line 59  void Finley_Assemble_PDE(Finley_NodeFile
59    double time0;    double time0;
60    dim_t dimensions[ESCRIPT_MAX_DATA_RANK];    dim_t dimensions[ESCRIPT_MAX_DATA_RANK];
61    type_t funcspace;    type_t funcspace;
62    // double blocktimer_start = blocktimer_time();    double blocktimer_start = blocktimer_time();
63    
64    Finley_resetError();    Dudley_resetError();
65    
66    {    {
   int iam, numCPUs;  
67  #ifdef Paso_MPI  #ifdef Paso_MPI
68      int iam, numCPUs;
69    iam = elements->elementDistribution->MPIInfo->rank;    iam = elements->elementDistribution->MPIInfo->rank;
70    numCPUs = elements->elementDistribution->MPIInfo->size;    numCPUs = elements->elementDistribution->MPIInfo->size;
71  #endif  #endif
# Line 76  void Finley_Assemble_PDE(Finley_NodeFile Line 75  void Finley_Assemble_PDE(Finley_NodeFile
75    if (S==NULL && isEmpty(F)) return;    if (S==NULL && isEmpty(F)) return;
76    
77    if (isEmpty(F) && !isEmpty(X) && !isEmpty(F)) {    if (isEmpty(F) && !isEmpty(X) && !isEmpty(F)) {
78          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: right hand side coefficients are non-zero bat no right hand side vector given.");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: right hand side coefficients are non-zero bat no right hand side vector given.");
79    }    }
80    
81    if (S==NULL && !isEmpty(A) && !isEmpty(B) && !isEmpty(C) && !isEmpty(D)) {    if (S==NULL && !isEmpty(A) && !isEmpty(B) && !isEmpty(C) && !isEmpty(D)) {
82          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: coefficients are non-zero but no matrix is given.");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: coefficients are non-zero but no matrix is given.");
83    }    }
84    
85    /*  get the functionspace for this assemblage call */    /*  get the functionspace for this assemblage call */
# Line 95  void Finley_Assemble_PDE(Finley_NodeFile Line 94  void Finley_Assemble_PDE(Finley_NodeFile
94    
95    /* check if all function spaces are the same */    /* check if all function spaces are the same */
96    if (! functionSpaceTypeEqual(funcspace,A) ) {    if (! functionSpaceTypeEqual(funcspace,A) ) {
97          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient A");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: unexpected function space type for coefficient A");
98    }    }
99    if (! functionSpaceTypeEqual(funcspace,B) ) {    if (! functionSpaceTypeEqual(funcspace,B) ) {
100          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient B");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: unexpected function space type for coefficient B");
101    }    }
102    if (! functionSpaceTypeEqual(funcspace,C) ) {    if (! functionSpaceTypeEqual(funcspace,C) ) {
103          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient C");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: unexpected function space type for coefficient C");
104    }    }
105    if (! functionSpaceTypeEqual(funcspace,D) ) {    if (! functionSpaceTypeEqual(funcspace,D) ) {
106          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient D");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: unexpected function space type for coefficient D");
107    }    }
108    if (! functionSpaceTypeEqual(funcspace,X) ) {    if (! functionSpaceTypeEqual(funcspace,X) ) {
109          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient X");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: unexpected function space type for coefficient X");
110    }    }
111    if (! functionSpaceTypeEqual(funcspace,Y) ) {    if (! functionSpaceTypeEqual(funcspace,Y) ) {
112          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient Y");          Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: unexpected function space type for coefficient Y");
113    }    }
114    if (! Finley_noError()) return;    if (! Dudley_noError()) return;
115    
116    /* check if all function spaces are the same */    /* check if all function spaces are the same */
117    if (funcspace==FINLEY_ELEMENTS) {    if (funcspace==DUDLEY_ELEMENTS) {
        reducedIntegrationOrder=FALSE;  
   } else if (funcspace==FINLEY_FACE_ELEMENTS)  {  
118         reducedIntegrationOrder=FALSE;         reducedIntegrationOrder=FALSE;
119    } else if (funcspace==FINLEY_CONTACT_ELEMENTS_1)  {    } else if (funcspace==DUDLEY_FACE_ELEMENTS)  {
120         reducedIntegrationOrder=FALSE;         reducedIntegrationOrder=FALSE;
121    } else if (funcspace==FINLEY_CONTACT_ELEMENTS_2)  {    } else if (funcspace==DUDLEY_REDUCED_ELEMENTS) {
        reducedIntegrationOrder=FALSE;  
   } else if (funcspace==FINLEY_REDUCED_ELEMENTS) {  
        reducedIntegrationOrder=TRUE;  
   } else if (funcspace==FINLEY_REDUCED_FACE_ELEMENTS)  {  
        reducedIntegrationOrder=TRUE;  
   } else if (funcspace==FINLEY_REDUCED_CONTACT_ELEMENTS_1)  {  
122         reducedIntegrationOrder=TRUE;         reducedIntegrationOrder=TRUE;
123    } else if (funcspace==FINLEY_REDUCED_CONTACT_ELEMENTS_2)  {    } else if (funcspace==DUDLEY_REDUCED_FACE_ELEMENTS)  {
124         reducedIntegrationOrder=TRUE;         reducedIntegrationOrder=TRUE;
125    } else {    } else {
126         Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: assemblage failed because of illegal function space.");         Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: assemblage failed because of illegal function space.");
127    }    }
128    if (! Finley_noError()) return;    if (! Dudley_noError()) return;
129    
130    /* set all parameters in p*/    /* set all parameters in p*/
131    Assemble_getAssembleParameters(nodes,elements,S,F, reducedIntegrationOrder, &p);    Assemble_getAssembleParameters(nodes,elements,S,F, reducedIntegrationOrder, &p);
132    if (! Finley_noError()) return;    if (! Dudley_noError()) return;
133    
134    /* check if all function spaces are the same */    /* check if all function spaces are the same */
135    
136    if (! numSamplesEqual(A,p.numQuad,elements->numElements) ) {    if (! numSamplesEqual(A,p.numQuadTotal,elements->numElements) ) {
137          sprintf(error_msg,"Finley_Assemble_PDE: sample points of coefficient A don't match (%d,%d)",p.numQuad,elements->numElements);          sprintf(error_msg,"Dudley_Assemble_PDE: sample points of coefficient A don't match (%d,%d)",p.numQuadTotal,elements->numElements);
138          Finley_setError(TYPE_ERROR,error_msg);          Dudley_setError(TYPE_ERROR,error_msg);
139    }    }
140    
141    if (! numSamplesEqual(B,p.numQuad,elements->numElements) ) {    if (! numSamplesEqual(B,p.numQuadTotal,elements->numElements) ) {
142          sprintf(error_msg,"Finley_Assemble_PDE: sample points of coefficient B don't match (%d,%d)",p.numQuad,elements->numElements);          sprintf(error_msg,"Dudley_Assemble_PDE: sample points of coefficient B don't match (%d,%d)",p.numQuadTotal,elements->numElements);
143          Finley_setError(TYPE_ERROR,error_msg);          Dudley_setError(TYPE_ERROR,error_msg);
144    }    }
145    
146    if (! numSamplesEqual(C,p.numQuad,elements->numElements) ) {    if (! numSamplesEqual(C,p.numQuadTotal,elements->numElements) ) {
147          sprintf(error_msg,"Finley_Assemble_PDE: sample points of coefficient C don't match (%d,%d)",p.numQuad,elements->numElements);          sprintf(error_msg,"Dudley_Assemble_PDE: sample points of coefficient C don't match (%d,%d)",p.numQuadTotal,elements->numElements);
148          Finley_setError(TYPE_ERROR,error_msg);          Dudley_setError(TYPE_ERROR,error_msg);
149    }    }
150    
151    if (! numSamplesEqual(D,p.numQuad,elements->numElements) ) {    if (! numSamplesEqual(D,p.numQuadTotal,elements->numElements) ) {
152          sprintf(error_msg,"Finley_Assemble_PDE: sample points of coefficient D don't match (%d,%d)",p.numQuad,elements->numElements);          sprintf(error_msg,"Dudley_Assemble_PDE: sample points of coefficient D don't match (%d,%d)",p.numQuadTotal,elements->numElements);
153          Finley_setError(TYPE_ERROR,error_msg);          Dudley_setError(TYPE_ERROR,error_msg);
154    }    }
155    
156    if (! numSamplesEqual(X,p.numQuad,elements->numElements) ) {    if (! numSamplesEqual(X,p.numQuadTotal,elements->numElements) ) {
157          sprintf(error_msg,"Finley_Assemble_PDE: sample points of coefficient X don't match (%d,%d)",p.numQuad,elements->numElements);          sprintf(error_msg,"Dudley_Assemble_PDE: sample points of coefficient X don't match (%d,%d)",p.numQuadTotal,elements->numElements);
158          Finley_setError(TYPE_ERROR,error_msg);          Dudley_setError(TYPE_ERROR,error_msg);
159    }    }
160    
161    if (! numSamplesEqual(Y,p.numQuad,elements->numElements) ) {    if (! numSamplesEqual(Y,p.numQuadTotal,elements->numElements) ) {
162          sprintf(error_msg,"Finley_Assemble_PDE: sample points of coefficient Y don't match (%d,%d)",p.numQuad,elements->numElements);          sprintf(error_msg,"Dudley_Assemble_PDE: sample points of coefficient Y don't match (%d,%d)",p.numQuadTotal,elements->numElements);
163          Finley_setError(TYPE_ERROR,error_msg);          Dudley_setError(TYPE_ERROR,error_msg);
164    }    }
165    
166    /*  check the dimensions: */    /*  check the dimensions: */
# Line 179  void Finley_Assemble_PDE(Finley_NodeFile Line 170  void Finley_Assemble_PDE(Finley_NodeFile
170        dimensions[0]=p.numDim;        dimensions[0]=p.numDim;
171        dimensions[1]=p.numDim;        dimensions[1]=p.numDim;
172        if (!isDataPointShapeEqual(A,2,dimensions)) {        if (!isDataPointShapeEqual(A,2,dimensions)) {
173            sprintf(error_msg,"Finley_Assemble_PDE: coefficient A: illegal shape, expected shape (%d,%d)",dimensions[0],dimensions[1]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient A: illegal shape, expected shape (%d,%d)",dimensions[0],dimensions[1]);
174            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
175        }        }
176      }      }
177      if (!isEmpty(B)) {      if (!isEmpty(B)) {
178         dimensions[0]=p.numDim;         dimensions[0]=p.numDim;
179         if (!isDataPointShapeEqual(B,1,dimensions)) {         if (!isDataPointShapeEqual(B,1,dimensions)) {
180            sprintf(error_msg,"Finley_Assemble_PDE: coefficient B: illegal shape (%d,)",dimensions[0]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient B: illegal shape (%d,)",dimensions[0]);
181            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
182         }         }
183      }      }
184      if (!isEmpty(C)) {      if (!isEmpty(C)) {
185         dimensions[0]=p.numDim;         dimensions[0]=p.numDim;
186         if (!isDataPointShapeEqual(C,1,dimensions)) {         if (!isDataPointShapeEqual(C,1,dimensions)) {
187            sprintf(error_msg,"Finley_Assemble_PDE: coefficient C, expected shape (%d,)",dimensions[0]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient C, expected shape (%d,)",dimensions[0]);
188            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
189         }         }
190      }      }
191      if (!isEmpty(D)) {      if (!isEmpty(D)) {
192         if (!isDataPointShapeEqual(D,0,dimensions)) {         if (!isDataPointShapeEqual(D,0,dimensions)) {
193            Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: coefficient D, rank 0 expected.");            Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: coefficient D, rank 0 expected.");
194         }         }
195      }      }
196      if (!isEmpty(X)) {      if (!isEmpty(X)) {
197         dimensions[0]=p.numDim;         dimensions[0]=p.numDim;
198         if (!isDataPointShapeEqual(X,1,dimensions)) {         if (!isDataPointShapeEqual(X,1,dimensions)) {
199            sprintf(error_msg,"Finley_Assemble_PDE: coefficient X, expected shape (%d,",dimensions[0]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient X, expected shape (%d,",dimensions[0]);
200            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
201         }         }
202      }      }
203      if (!isEmpty(Y)) {      if (!isEmpty(Y)) {
204         if (!isDataPointShapeEqual(Y,0,dimensions)) {         if (!isDataPointShapeEqual(Y,0,dimensions)) {
205            Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: coefficient Y, rank 0 expected.");            Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: coefficient Y, rank 0 expected.");
206         }         }
207      }      }
208    } else {    } else {
# Line 221  void Finley_Assemble_PDE(Finley_NodeFile Line 212  void Finley_Assemble_PDE(Finley_NodeFile
212        dimensions[2]=p.numComp;        dimensions[2]=p.numComp;
213        dimensions[3]=p.numDim;        dimensions[3]=p.numDim;
214        if (!isDataPointShapeEqual(A,4,dimensions)) {        if (!isDataPointShapeEqual(A,4,dimensions)) {
215            sprintf(error_msg,"Finley_Assemble_PDE: coefficient A, expected shape (%d,%d,%d,%d)",dimensions[0],dimensions[1],dimensions[2],dimensions[3]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient A, expected shape (%d,%d,%d,%d)",dimensions[0],dimensions[1],dimensions[2],dimensions[3]);
216            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
217        }        }
218      }      }
219      if (!isEmpty(B)) {      if (!isEmpty(B)) {
# Line 230  void Finley_Assemble_PDE(Finley_NodeFile Line 221  void Finley_Assemble_PDE(Finley_NodeFile
221        dimensions[1]=p.numDim;        dimensions[1]=p.numDim;
222        dimensions[2]=p.numComp;        dimensions[2]=p.numComp;
223        if (!isDataPointShapeEqual(B,3,dimensions)) {        if (!isDataPointShapeEqual(B,3,dimensions)) {
224            sprintf(error_msg,"Finley_Assemble_PDE: coefficient B, expected shape (%d,%d,%d)",dimensions[0],dimensions[1],dimensions[2]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient B, expected shape (%d,%d,%d)",dimensions[0],dimensions[1],dimensions[2]);
225            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
226        }        }
227      }      }
228      if (!isEmpty(C)) {      if (!isEmpty(C)) {
# Line 239  void Finley_Assemble_PDE(Finley_NodeFile Line 230  void Finley_Assemble_PDE(Finley_NodeFile
230        dimensions[1]=p.numComp;        dimensions[1]=p.numComp;
231        dimensions[2]=p.numDim;        dimensions[2]=p.numDim;
232        if (!isDataPointShapeEqual(C,3,dimensions)) {        if (!isDataPointShapeEqual(C,3,dimensions)) {
233            sprintf(error_msg,"Finley_Assemble_PDE: coefficient C, expected shape (%d,%d,%d)",dimensions[0],dimensions[1],dimensions[2]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient C, expected shape (%d,%d,%d)",dimensions[0],dimensions[1],dimensions[2]);
234            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
235        }        }
236      }      }
237      if (!isEmpty(D)) {      if (!isEmpty(D)) {
238        dimensions[0]=p.numEqu;        dimensions[0]=p.numEqu;
239        dimensions[1]=p.numComp;        dimensions[1]=p.numComp;
240        if (!isDataPointShapeEqual(D,2,dimensions)) {        if (!isDataPointShapeEqual(D,2,dimensions)) {
241            sprintf(error_msg,"Finley_Assemble_PDE: coefficient D, expected shape (%d,%d)",dimensions[0],dimensions[1]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient D, expected shape (%d,%d)",dimensions[0],dimensions[1]);
242            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
243        }        }
244      }      }
245      if (!isEmpty(X)) {      if (!isEmpty(X)) {
246        dimensions[0]=p.numEqu;        dimensions[0]=p.numEqu;
247        dimensions[1]=p.numDim;        dimensions[1]=p.numDim;
248        if (!isDataPointShapeEqual(X,2,dimensions)) {        if (!isDataPointShapeEqual(X,2,dimensions)) {
249            sprintf(error_msg,"Finley_Assemble_PDE: coefficient X, expected shape (%d,%d)",dimensions[0],dimensions[1]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient X, expected shape (%d,%d)",dimensions[0],dimensions[1]);
250            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
251        }        }
252      }      }
253      if (!isEmpty(Y)) {      if (!isEmpty(Y)) {
254        dimensions[0]=p.numEqu;        dimensions[0]=p.numEqu;
255        if (!isDataPointShapeEqual(Y,1,dimensions)) {        if (!isDataPointShapeEqual(Y,1,dimensions)) {
256            sprintf(error_msg,"Finley_Assemble_PDE: coefficient Y, expected shape (%d,)",dimensions[0]);            sprintf(error_msg,"Dudley_Assemble_PDE: coefficient Y, expected shape (%d,)",dimensions[0]);
257            Finley_setError(TYPE_ERROR,error_msg);            Dudley_setError(TYPE_ERROR,error_msg);
258        }        }
259      }      }
260    }    }
261    if (Finley_noError()) {    if (Dudley_noError()) {
262       time0=Finley_timer();       time0=Dudley_timer();
263       if (p.numEqu == p. numComp) {       if (p.numEqu == p. numComp) {
264          if (p.numEqu > 1) {          if (p.numEqu > 1) {
265            /* system of PDESs */            /* system of PDESs */
266            if (p.numDim==3) {            if (p.numDim==3) {
267              if (p.row_NS == p.col_NS && p.row_NS == p.row_NN && p.col_NS == p.col_NN ) {              if ( p.numSides == 1 ) {
268                 Finley_Assemble_PDE_System2_3D(p,elements,S,F,A,B,C,D,X,Y);                 Dudley_Assemble_PDE_System2_3D(p,elements,S,F,A,B,C,D,X,Y);
269              } else if ( p.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {              } else if ( p.numSides == 2 ) {
270                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {
271                    Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");                    Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");
272                 } else {                 } else {
273                    Finley_Assemble_PDE_System2_C(p,elements,S,F,D,Y);                    Dudley_Assemble_PDE_System2_C(p,elements,S,F,D,Y);
274                 }                 }
275              } else {              } else {
276                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
277              }              }
278            } else if (p.numDim==2) {            } else if (p.numDim==2) {
279              if ((p.row_NS == p.col_NS) && (p.row_NS == p.row_NN) && (p.col_NS == p.col_NN )) {              if ( p.numSides == 1 ) {
280                 Finley_Assemble_PDE_System2_2D(p,elements,S,F,A,B,C,D,X,Y);                 Dudley_Assemble_PDE_System2_2D(p,elements,S,F,A,B,C,D,X,Y);
281              } else if ( p.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {              } else if (  p.numSides == 2 ) {
282                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {
283                    Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");                    Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");
284                 } else {                 } else {
285                    Finley_Assemble_PDE_System2_C(p,elements,S,F,D,Y);                    Dudley_Assemble_PDE_System2_C(p,elements,S,F,D,Y);
286                 }                 }
287              } else {              } else {
288                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
289              }              }
290            } else if (p.numDim==2) {            } else if (p.numDim==1) {
291              if (p.row_NS == p.col_NS && p.row_NS == p.row_NN && p.col_NS == p.col_NN ) {              if ( p.numSides == 1  ) {
292                 Finley_Assemble_PDE_System2_1D(p,elements,S,F,A,B,C,D,X,Y);                 Dudley_Assemble_PDE_System2_1D(p,elements,S,F,A,B,C,D,X,Y);
293              } else if ( p.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {              } else if ( p.numSides == 2 ) {
294                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {
295                    Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");                    Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");
296                 } else {                 } else {
297                    Finley_Assemble_PDE_System2_C(p,elements,S,F,D,Y);                    Dudley_Assemble_PDE_System2_C(p,elements,S,F,D,Y);
298                 }                 }
299              } else {              } else {
300                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
301              }              }
302            } else {            } else {
303              Finley_setError(VALUE_ERROR,"Finley_Assemble_PDE supports spatial dimensions 1,2,3 only.");              Dudley_setError(VALUE_ERROR,"Dudley_Assemble_PDE supports spatial dimensions 1,2,3 only.");
304            }            }
305          } else {          } else {
306            /* single PDES */            /* single PDES */
307            if (p.numDim==3) {            if (p.numDim==3) {
308              if (p.row_NS == p.col_NS && p.row_NS == p.row_NN && p.col_NS == p.col_NN ) {              if ( p.numSides == 1  ) {
309                 Finley_Assemble_PDE_Single2_3D(p,elements,S,F,A,B,C,D,X,Y);                 Dudley_Assemble_PDE_Single2_3D(p,elements,S,F,A,B,C,D,X,Y);
310              } else if ( p.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {              } else if ( p.numSides == 2 ) {
311                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {
312                    Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");                    Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");
313                 } else {                 } else {
314                    Finley_Assemble_PDE_Single2_C(p,elements,S,F,D,Y);                    Dudley_Assemble_PDE_Single2_C(p,elements,S,F,D,Y);
315                 }                 }
316              } else {              } else {
317                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
318              }              }
319            } else if (p.numDim==2) {            } else if (p.numDim==2) {
320              if ((p.row_NS == p.col_NS) && (p.row_NS == p.row_NN) && (p.col_NS == p.col_NN )) {              if ( p.numSides == 1 ) {
321                 Finley_Assemble_PDE_Single2_2D(p,elements,S,F,A,B,C,D,X,Y);                 Dudley_Assemble_PDE_Single2_2D(p,elements,S,F,A,B,C,D,X,Y);
322              } else if ( p.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {              } else if ( p.numSides == 2 ) {
323                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {
324                    Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");                    Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");
325                 } else {                 } else {
326                    Finley_Assemble_PDE_Single2_C(p,elements,S,F,D,Y);                    Dudley_Assemble_PDE_Single2_C(p,elements,S,F,D,Y);
327                 }                 }
328              } else {              } else {
329                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
330              }              }
331            } else if (p.numDim==2) {            } else if (p.numDim==1) {
332              if (p.row_NS == p.col_NS && p.row_NS == p.row_NN && p.col_NS == p.col_NN ) {              if ( p.numSides == 1 ) {
333                 Finley_Assemble_PDE_Single2_1D(p,elements,S,F,A,B,C,D,X,Y);                 Dudley_Assemble_PDE_Single2_1D(p,elements,S,F,A,B,C,D,X,Y);
334              } else if ( p.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {              } else if ( p.numSides == 2  ) {
335                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {                 if ( !isEmpty(A) || !isEmpty(B) || !isEmpty(C) || !isEmpty(X) ) {
336                    Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");                    Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE: Contact elements require A, B, C and X to be empty.");
337                 } else {                 } else {
338                    Finley_Assemble_PDE_Single2_C(p,elements,S,F,D,Y);                    Dudley_Assemble_PDE_Single2_C(p,elements,S,F,D,Y);
339                 }                 }
340              } else {              } else {
341                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Dudley_setError(TYPE_ERROR,"Dudley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
342              }              }
343            } else {            } else {
344              Finley_setError(VALUE_ERROR,"Finley_Assemble_PDE supports spatial dimensions 1,2,3 only.");              Dudley_setError(VALUE_ERROR,"Dudley_Assemble_PDE supports spatial dimensions 1,2,3 only.");
345            }            }
346          }          }
347       } else {       } else {
348            Finley_setError(VALUE_ERROR,"Finley_Assemble_PDE requires number of equations == number of solutions  .");            Dudley_setError(VALUE_ERROR,"Dudley_Assemble_PDE requires number of equations == number of solutions  .");
349       }       }
      #ifdef Finley_TRACE  
      printf("timing: assemblage PDE: %.4e sec\n",Finley_timer()-time0);  
      #endif  
350    }    }
351    // blocktimer_increment("Finley_Assemble_PDE()", blocktimer_start);    blocktimer_increment("Dudley_Assemble_PDE()", blocktimer_start);
352  }  }
 /*  
  * $Log$  
  * Revision 1.8  2005/09/15 03:44:21  jgs  
  * Merge of development branch dev-02 back to main trunk on 2005-09-15  
  *  
  * Revision 1.7  2005/09/01 03:31:35  jgs  
  * Merge of development branch dev-02 back to main trunk on 2005-09-01  
  *  
  * Revision 1.6  2005/08/12 01:45:42  jgs  
  * erge of development branch dev-02 back to main trunk on 2005-08-12  
  *  
  * Revision 1.5.2.3  2005/09/07 06:26:17  gross  
  * the solver from finley are put into the standalone package paso now  
  *  
  * Revision 1.5.2.2  2005/08/24 02:02:18  gross  
  * timing output switched off. solver output can be swiched through getSolution(verbose=True) now.  
  *  
  * Revision 1.5.2.1  2005/08/03 08:54:27  gross  
  * contact element assemblage was called with wrong element table pointer  
  *  
  * Revision 1.5  2005/07/08 04:07:46  jgs  
  * Merge of development branch back to main trunk on 2005-07-08  
  *  
  * Revision 1.4  2004/12/15 07:08:32  jgs  
  * *** empty log message ***  
  * Revision 1.1.1.1.2.2  2005/06/29 02:34:47  gross  
  * some changes towards 64 integers in finley  
  *  
  * Revision 1.1.1.1.2.1  2004/11/24 01:37:12  gross  
  * some changes dealing with the integer overflow in memory allocation. Finley solves 4M unknowns now  
  *  
  *  
  *  
  */  

Legend:
Removed from v.1352  
changed lines
  Added in v.3090

  ViewVC Help
Powered by ViewVC 1.1.26