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

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

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

revision 969 by ksteube, Tue Feb 13 23:02:23 2007 UTC revision 2548 by jfenwick, Mon Jul 20 06:20:06 2009 UTC
# Line 1  Line 1 
1  /*  
2   ************************************************************  /*******************************************************
3   *          Copyright 2006 by ACcESS MNRF                   *  *
4   *                                                          *  * Copyright (c) 2003-2009 by University of Queensland
5   *              http://www.access.edu.au                    *  * Earth Systems Science Computational Center (ESSCC)
6   *       Primary Business: Queensland, Australia            *  * http://www.uq.edu.au/esscc
7   *  Licensed under the Open Software License version 3.0    *  *
8   *     http://www.opensource.org/licenses/osl-3.0.php       *  * Primary Business: Queensland, Australia
9   *                                                          *  * Licensed under the Open Software License version 3.0
10   ************************************************************  * http://www.opensource.org/licenses/osl-3.0.php
11  */  *
12    *******************************************************/
13    
14    
15  /**************************************************************/  /**************************************************************/
# Line 39  Line 40 
40    
41  /**************************************************************/  /**************************************************************/
42    
 /*  Author: gross@access.edu.au */  
 /*  Version: $Id$ */  
   
 /**************************************************************/  
   
43  #include "Assemble.h"  #include "Assemble.h"
44  #include "Util.h"  #include "Util.h"
45    #include "esysUtils/blocktimer.h"
46  #ifdef _OPENMP  #ifdef _OPENMP
47  #include <omp.h>  #include <omp.h>
48  #endif  #endif
# Line 61  void Finley_Assemble_PDE(Finley_NodeFile Line 58  void Finley_Assemble_PDE(Finley_NodeFile
58    Assemble_Parameters p;    Assemble_Parameters p;
59    double time0;    double time0;
60    dim_t dimensions[ESCRIPT_MAX_DATA_RANK];    dim_t dimensions[ESCRIPT_MAX_DATA_RANK];
61      type_t funcspace;
62      double blocktimer_start = blocktimer_time();
63    
64    Finley_resetError();    Finley_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;
   printf("ksteube finley/src/Assemble_PDE.c : Finley_Assemble_PDE\n");  
   printf("ksteube size=%d iam=%d\n", numCPUs,  iam);  
   printf("ksteube iam=%d #elements: L=%d I=%d B=%d\n", iam, elements->elementDistribution->numLocal, elements->elementDistribution->numInternal, elements->elementDistribution->numBoundary);  
71  #endif  #endif
72    }    }
73    
74    if (nodes==NULL || elements==NULL) return;    if (nodes==NULL || elements==NULL) return;
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.");          Finley_setError(TYPE_ERROR,"Finley_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.");          Finley_setError(TYPE_ERROR,"Finley_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 */
86    type_t funcspace=UNKNOWN;    funcspace=UNKNOWN;
87    updateFunctionSpaceType(funcspace,A);    updateFunctionSpaceType(funcspace,A);
88    updateFunctionSpaceType(funcspace,B);    updateFunctionSpaceType(funcspace,B);
89    updateFunctionSpaceType(funcspace,C);    updateFunctionSpaceType(funcspace,C);
# Line 96  void Finley_Assemble_PDE(Finley_NodeFile Line 92  void Finley_Assemble_PDE(Finley_NodeFile
92    updateFunctionSpaceType(funcspace,Y);    updateFunctionSpaceType(funcspace,Y);
93    if (funcspace==UNKNOWN) return; /* all  data are empty */    if (funcspace==UNKNOWN) return; /* all  data are empty */
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");          Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: unexpected function space type for coefficient A");
# Line 127  void Finley_Assemble_PDE(Finley_NodeFile Line 122  void Finley_Assemble_PDE(Finley_NodeFile
122         reducedIntegrationOrder=FALSE;         reducedIntegrationOrder=FALSE;
123    } else if (funcspace==FINLEY_CONTACT_ELEMENTS_2)  {    } else if (funcspace==FINLEY_CONTACT_ELEMENTS_2)  {
124         reducedIntegrationOrder=FALSE;         reducedIntegrationOrder=FALSE;
125      } else if (funcspace==FINLEY_REDUCED_ELEMENTS) {
126           reducedIntegrationOrder=TRUE;
127      } else if (funcspace==FINLEY_REDUCED_FACE_ELEMENTS)  {
128           reducedIntegrationOrder=TRUE;
129      } else if (funcspace==FINLEY_REDUCED_CONTACT_ELEMENTS_1)  {
130           reducedIntegrationOrder=TRUE;
131      } else if (funcspace==FINLEY_REDUCED_CONTACT_ELEMENTS_2)  {
132           reducedIntegrationOrder=TRUE;
133    } else {    } else {
134         Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: assemblage failed because of illegal function space.");         Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: assemblage failed because of illegal function space.");
135    }    }
# Line 169  void Finley_Assemble_PDE(Finley_NodeFile Line 172  void Finley_Assemble_PDE(Finley_NodeFile
172    }    }
173    
174    /*  check the dimensions: */    /*  check the dimensions: */
175      
176    if (p.numEqu==1 && p.numComp==1) {    if (p.numEqu==1 && p.numComp==1) {
177      if (!isEmpty(A)) {      if (!isEmpty(A)) {
178        dimensions[0]=p.numDim;        dimensions[0]=p.numDim;
# Line 209  void Finley_Assemble_PDE(Finley_NodeFile Line 212  void Finley_Assemble_PDE(Finley_NodeFile
212         if (!isDataPointShapeEqual(Y,0,dimensions)) {         if (!isDataPointShapeEqual(Y,0,dimensions)) {
213            Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: coefficient Y, rank 0 expected.");            Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE: coefficient Y, rank 0 expected.");
214         }         }
215      }      }
216    } else {    } else {
217      if (!isEmpty(A)) {      if (!isEmpty(A)) {
218        dimensions[0]=p.numEqu;        dimensions[0]=p.numEqu;
# Line 333  void Finley_Assemble_PDE(Finley_NodeFile Line 336  void Finley_Assemble_PDE(Finley_NodeFile
336              } else {              } else {
337                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");                 Finley_setError(TYPE_ERROR,"Finley_Assemble_PDE supports numShape=NumNodes or 2*numShape=NumNodes only.");
338              }              }
339            } else if (p.numDim==2) {            } else if (p.numDim==1) {
340              if (p.row_NS == p.col_NS && p.row_NS == p.row_NN && p.col_NS == p.col_NN ) {              if (p.row_NS == p.col_NS && p.row_NS == p.row_NN && p.col_NS == p.col_NN ) {
341                 Finley_Assemble_PDE_Single2_1D(p,elements,S,F,A,B,C,D,X,Y);                 Finley_Assemble_PDE_Single2_1D(p,elements,S,F,A,B,C,D,X,Y);
342              } 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.row_NS == p.col_NS &&  2*p.row_NS == p.row_NN && 2*p.col_NS == p.col_NN ) {
# Line 356  void Finley_Assemble_PDE(Finley_NodeFile Line 359  void Finley_Assemble_PDE(Finley_NodeFile
359       printf("timing: assemblage PDE: %.4e sec\n",Finley_timer()-time0);       printf("timing: assemblage PDE: %.4e sec\n",Finley_timer()-time0);
360       #endif       #endif
361    }    }
362      blocktimer_increment("Finley_Assemble_PDE()", blocktimer_start);
363  }  }
364  /*  /*
365   * $Log$   * $Log$

Legend:
Removed from v.969  
changed lines
  Added in v.2548

  ViewVC Help
Powered by ViewVC 1.1.26