00001 #include "globalt.h"
00002 #include "genfile.h"
00003 #include "globmatt.h"
00004 #include "lhsrhst.h"
00005 #include <string.h>
00006
00007 lhsrhst::lhsrhst ()
00008 {
00009 nlc=Tb->nlc; lhs=NULL; rhs=NULL; lhsi=NULL; tdlhs=NULL;
00010 }
00011
00012 lhsrhst::~lhsrhst ()
00013 {
00014 delete [] lhs;
00015 delete [] rhs;
00016 delete [] lhsi;
00017 delete [] tdlhs;
00018 }
00019
00020
00021
00022
00023
00024 void lhsrhst::alloc ()
00025 {
00026 switch (Tp->tprob){
00027 case stationary_problem:{
00028 lhs = new double [Ndoft];
00029 memset (lhs,0,(Ndoft)*sizeof(double));
00030 lhsi = new double [Ndoft];
00031 memset (lhsi,0,(Ndoft)*sizeof(double));
00032 rhs = new double [Ndoft];
00033 memset (rhs,0,(Ndoft)*sizeof(double));
00034 break;
00035 }
00036 case nonlinear_stationary_problem:{
00037 lhs = new double [nlc*Ndoft];
00038 memset (lhs,0,(nlc*Ndoft)*sizeof(double));
00039 lhsi = new double [nlc*Ndoft];
00040 memset (lhsi,0,(nlc*Ndoft)*sizeof(double));
00041 rhs = new double [2*nlc*Ndoft];
00042 memset (rhs,0,(2*nlc*Ndoft)*sizeof(double));
00043 break;
00044 }
00045 case nonstationary_problem:{
00046 lhs = new double [Ndoft];
00047 memset (lhs,0,(Ndoft)*sizeof(double));
00048 lhsi = new double [Ndoft];
00049 memset (lhsi,0,(Ndoft)*sizeof(double));
00050 tdlhs = new double [Ndoft];
00051 memset (tdlhs,0,(Ndoft)*sizeof(double));
00052 rhs = new double [Ndoft];
00053 memset (rhs,0,(Ndoft)*sizeof(double));
00054 break;
00055 }
00056 case nonlinear_nonstationary_problem:{
00057 lhs = new double [Ndoft];
00058 memset (lhs,0,(Ndoft)*sizeof(double));
00059 lhsi = new double [Ndoft];
00060 memset (lhsi,0,(Ndoft)*sizeof(double));
00061 tdlhs = new double [Ndoft];
00062 memset (tdlhs,0,(Ndoft)*sizeof(double));
00063 rhs = new double [Ndoft];
00064 memset (rhs,0,(Ndoft)*sizeof(double));
00065 break;
00066 }
00067 case discont_nonstat_problem:{
00068 lhs = new double [Ndoft];
00069 memset (lhs,0,(Ndoft)*sizeof(double));
00070 lhsi = new double [Ndoft];
00071 memset (lhsi,0,(Ndoft)*sizeof(double));
00072 tdlhs = new double [Ndoft];
00073 memset (tdlhs,0,(Ndoft)*sizeof(double));
00074 rhs = new double [Ndoft];
00075 memset (rhs,0,(Ndoft)*sizeof(double));
00076 break;
00077 }
00078 case discont_nonlin_nonstat_problem:{
00079 lhs = new double [Ndoft];
00080 memset (lhs,0,(Ndoft)*sizeof(double));
00081 lhsi = new double [Ndoft];
00082 memset (lhsi,0,(Ndoft)*sizeof(double));
00083 tdlhs = new double [Ndoft];
00084 memset (tdlhs,0,(Ndoft)*sizeof(double));
00085 rhs = new double [Ndoft];
00086 memset (rhs,0,(Ndoft)*sizeof(double));
00087 break;
00088 }
00089 case growing_np_problem:{
00090 lhs = new double [Ndoft];
00091 memset (lhs,0,(Ndoft)*sizeof(double));
00092 lhsi = new double [Ndoft];
00093 memset (lhsi,0,(Ndoft)*sizeof(double));
00094 tdlhs = new double [Ndoft];
00095 memset (tdlhs,0,(Ndoft)*sizeof(double));
00096 rhs = new double [Ndoft];
00097 memset (rhs,0,(Ndoft)*sizeof(double));
00098 break;
00099 }
00100 case growing_np_problem_nonlin:{
00101 lhs = new double [Ndoft];
00102 memset (lhs,0,(Ndoft)*sizeof(double));
00103 lhsi = new double [Ndoft];
00104 memset (lhsi,0,(Ndoft)*sizeof(double));
00105 tdlhs = new double [Ndoft];
00106 memset (tdlhs,0,(Ndoft)*sizeof(double));
00107 rhs = new double [Ndoft];
00108 memset (rhs,0,(Ndoft)*sizeof(double));
00109 break;
00110 }
00111 default:{
00112 print_err("unknown problem type is required",__FILE__,__LINE__,__func__);
00113 }
00114 }
00115 }
00116
00117 double *lhsrhst::give_lhs (long lcid)
00118 {
00119 return (lhs+lcid*Ndoft);
00120 }
00121
00122 double *lhsrhst::give_lhsi (long lcid)
00123 {
00124 return (lhsi+lcid*Ndoft);
00125 }
00126
00127 double *lhsrhst::give_tdlhs (long lcid)
00128 {
00129 return (tdlhs+lcid*Ndoft);
00130 }
00131
00132 double *lhsrhst::give_rhs (long lcid)
00133 {
00134 return (rhs+lcid*Ndoft);
00135 }
00136
00137
00138
00139
00140
00141
00142
00143
00144 void lhsrhst::initcond (XFILE *in)
00145 {
00146 long i,j,k,l,ndofn;
00147 double v;
00148
00149 switch (Tp->tprob){
00150 case stationary_problem:{
00151 break;
00152 }
00153 case nonlinear_stationary_problem:
00154 case nonstationary_problem:
00155 case nonlinear_nonstationary_problem:
00156 case growing_np_problem:
00157 case growing_np_problem_nonlin:
00158 case discont_nonstat_problem:
00159 case discont_nonlin_nonstat_problem:{
00160 for (i=0;i<Tt->nn;i++){
00161 ndofn=Gtt->give_ndofn (i);
00162 xfscanf (in,"%ld",&l);
00163 for (j=0;j<ndofn;j++){
00164 k=Gtt->give_dof (l-1,j)-1;
00165 xfscanf (in,"%lf",&v);
00166 if (k>-1){ lhsi[k]=v; }
00167 }
00168 }
00169 break;
00170 }
00171 default:{
00172 print_err("unknown problem type is required",__FILE__,__LINE__,__func__);
00173 }
00174 }
00175 }
00176
00177
00178
00179
00180
00181
00182
00183
00184 void lhsrhst::initcondprint (FILE *out)
00185 {
00186 long i,j,k,ndofn;
00187
00188 fprintf (out,"\n\n");
00189 switch (Tp->tprob){
00190 case nonlinear_stationary_problem:
00191 case nonstationary_problem:
00192 case nonlinear_nonstationary_problem:
00193 case growing_np_problem:
00194 case growing_np_problem_nonlin:
00195 case discont_nonlin_nonstat_problem:{
00196 for (i=0;i<Tt->nn;i++){
00197 ndofn=Gtt->give_ndofn (i);
00198 fprintf (out,"\n %ld ",i+1);
00199 for (j=0;j<ndofn;j++){
00200 k=Gtt->give_dof (i,j)-1;
00201 if (k>-1){ fprintf (out," %lf",lhsi[k]);}
00202 else {fprintf (out," 0.0");}
00203 }
00204 }
00205 break;
00206 }
00207 default:{
00208 print_err("unknown problem type is required",__FILE__,__LINE__,__func__);
00209 }
00210 }
00211 }
00212