/[escript]/trunk/paso/src/FCTSolver.c
ViewVC logotype

Diff of /trunk/paso/src/FCTSolver.c

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

revision 3120 by gross, Mon Aug 30 10:48:00 2010 UTC revision 3259 by jfenwick, Mon Oct 11 01:48:14 2010 UTC
# Line 38  Paso_Function* Paso_FCTSolver_Function_a Line 38  Paso_Function* Paso_FCTSolver_Function_a
38      Paso_Function * out=NULL;      Paso_Function * out=NULL;
39      Paso_FCTSolver *more=NULL;      Paso_FCTSolver *more=NULL;
40      out=MEMALLOC(1,Paso_Function);      out=MEMALLOC(1,Paso_Function);
41      if (! Paso_checkPtr(out)) {      if (! Esys_checkPtr(out)) {
42          out->kind=FCT;          out->kind=FCT;
43          out->mpi_info=Paso_MPIInfo_getReference(fctp->mpi_info);          out->mpi_info=Esys_MPIInfo_getReference(fctp->mpi_info);
44          out->n=n;          out->n=n;
45      out->b=TMPMEMALLOC(n,double); /*b_m */      out->b=TMPMEMALLOC(n,double); /*b_m */
46      Paso_checkPtr(out->b);              Esys_checkPtr(out->b);        
47      out->tmp=TMPMEMALLOC(n,double); /* z_m */      out->tmp=TMPMEMALLOC(n,double); /* z_m */
48      Paso_checkPtr(out->tmp);      Esys_checkPtr(out->tmp);
49            
50      more=MEMALLOC(1,Paso_FCTSolver);      more=MEMALLOC(1,Paso_FCTSolver);
51      out->more=(void*) more;      out->more=(void*) more;
52      if (! Paso_checkPtr(more)) {      if (! Esys_checkPtr(more)) {
53          more->transportproblem=Paso_TransportProblem_getReference(fctp);          more->transportproblem=Paso_TransportProblem_getReference(fctp);
54          more->uTilde_n=TMPMEMALLOC(n,double);          more->uTilde_n=TMPMEMALLOC(n,double);
55          Paso_checkPtr(more->uTilde_n);          Esys_checkPtr(more->uTilde_n);
56          more->QN_n=TMPMEMALLOC(n,double);          more->QN_n=TMPMEMALLOC(n,double);
57          Paso_checkPtr(more->QN_n);          Esys_checkPtr(more->QN_n);
58          more->QP_n=TMPMEMALLOC(n,double);          more->QP_n=TMPMEMALLOC(n,double);
59          Paso_checkPtr(more->QP_n);          Esys_checkPtr(more->QP_n);
60          more->RN_m=TMPMEMALLOC(n,double);          more->RN_m=TMPMEMALLOC(n,double);
61          Paso_checkPtr(more->RN_m);          Esys_checkPtr(more->RN_m);
62          more->RP_m=TMPMEMALLOC(n,double);          more->RP_m=TMPMEMALLOC(n,double);
63          Paso_checkPtr(more->RP_m);          Esys_checkPtr(more->RP_m);
64          more->QN_n_coupler=Paso_Coupler_alloc(Paso_TransportProblem_borrowConnector(fctp),blockSize);          more->QN_n_coupler=Paso_Coupler_alloc(Paso_TransportProblem_borrowConnector(fctp),blockSize);
65          more->QP_n_coupler=Paso_Coupler_alloc(Paso_TransportProblem_borrowConnector(fctp),blockSize);          more->QP_n_coupler=Paso_Coupler_alloc(Paso_TransportProblem_borrowConnector(fctp),blockSize);
66          more->RN_m_coupler=Paso_Coupler_alloc(Paso_TransportProblem_borrowConnector(fctp),blockSize);          more->RN_m_coupler=Paso_Coupler_alloc(Paso_TransportProblem_borrowConnector(fctp),blockSize);
# Line 74  Paso_Function* Paso_FCTSolver_Function_a Line 74  Paso_Function* Paso_FCTSolver_Function_a
74                                                            
75          }          }
76      }      }
77      if (Paso_noError()) {      if (Esys_noError()) {
78          return out;          return out;
79      } else {      } else {
80          Paso_FCTSolver_Function_free(out);          Paso_FCTSolver_Function_free(out);
# Line 86  void Paso_FCTSolver_Function_free(Paso_F Line 86  void Paso_FCTSolver_Function_free(Paso_F
86  {  {
87     Paso_FCTSolver *more=NULL;     Paso_FCTSolver *more=NULL;
88     if (in!=NULL) {     if (in!=NULL) {
89         Paso_MPIInfo_free(in->mpi_info);         Esys_MPIInfo_free(in->mpi_info);
90         MEMFREE(in->tmp);         MEMFREE(in->tmp);
91         MEMFREE(in->b);         MEMFREE(in->b);
92         more=(Paso_FCTSolver *) (in->more);         more=(Paso_FCTSolver *) (in->more);
# Line 118  double Paso_FCTSolver_getSafeTimeStepSiz Line 118  double Paso_FCTSolver_getSafeTimeStepSiz
118     /* set low order transport operator */     /* set low order transport operator */
119     Paso_FCTSolver_setLowOrderOperator(fctp);     Paso_FCTSolver_setLowOrderOperator(fctp);
120                        
121     if (Paso_noError()) {     if (Esys_noError()) {
122          /*          /*
123           *  calculate time step size:                                                     *  calculate time step size:                                          
124          */          */
# Line 145  double Paso_FCTSolver_getSafeTimeStepSiz Line 145  double Paso_FCTSolver_getSafeTimeStepSiz
145            fail=MIN(fail, fail_loc);            fail=MIN(fail, fail_loc);
146                 }                 }
147          }          }
148          #ifdef PASO_MPI          #ifdef ESYS_MPI
149          {          {
150             double rtmp_loc[2], rtmp[2];             double rtmp_loc[2], rtmp[2];
151                 rtmp_loc[0]=dt_max;                 rtmp_loc[0]=dt_max;
# Line 156  double Paso_FCTSolver_getSafeTimeStepSiz Line 156  double Paso_FCTSolver_getSafeTimeStepSiz
156      }      }
157          #endif          #endif
158          if (fail < 0 ) {          if (fail < 0 ) {
159         Paso_setError(VALUE_ERROR, "Paso_FCTSolver_getSafeTimeStepSize: negative mass matrix entries detected.");         Esys_setError(VALUE_ERROR, "Paso_FCTSolver_getSafeTimeStepSize: negative mass matrix entries detected.");
160         return -1;         return -1;
161      } else {      } else {
162          if (dt_max<LARGE_POSITIVE_FLOAT) dt_max*=fctp->dt_factor;          if (dt_max<LARGE_POSITIVE_FLOAT) dt_max*=fctp->dt_factor;
# Line 225  err_t Paso_FCTSolver_solve(Paso_Function Line 225  err_t Paso_FCTSolver_solve(Paso_Function
225      } else {      } else {
226              m=0;              m=0;
227          du=MEMALLOC(n,double);          du=MEMALLOC(n,double);
228          if (Paso_checkPtr(du)) {          if (Esys_checkPtr(du)) {
229                     errorCode=SOLVER_MEMORY_ERROR;                     errorCode=SOLVER_MEMORY_ERROR;
230          } else {          } else {
231               /* tolerance? */               /* tolerance? */
232                            
233                   while ( (!converged) && (!diverged) && (! max_m_reached) && Paso_noError()) {                   while ( (!converged) && (!diverged) && (! max_m_reached) && Esys_noError()) {
234                  errorCode=Paso_FCTSolver_Function_call(F,du, u, pp);                  errorCode=Paso_FCTSolver_Function_call(F,du, u, pp);
235                      options->num_iter++;                      options->num_iter++;
236                      Paso_Update(n,1.,u,omega,du);                      Paso_Update(n,1.,u,omega,du);

Legend:
Removed from v.3120  
changed lines
  Added in v.3259

  ViewVC Help
Powered by ViewVC 1.1.26