00001 #include <string.h>
00002 #include <stdlib.h>
00003 #include "bocont.h"
00004 #include "parser.h"
00005 #include "globalt.h"
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 bocont::bocont()
00019 {
00020 lcid = -1;
00021 con = 0.0;
00022 iv = 0.0;
00023 cgf = NULL;
00024 }
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037 bocont::~bocont()
00038 {
00039 if (cgf)
00040 delete cgf;
00041 }
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058 long bocont::read(XFILE *in, long ndofn)
00059 {
00060 xfscanf(in, "%k%ld", "lc_id", &lcid);
00061 if ((lcid < 1) || (lcid > ndofn))
00062
00063 return(1);
00064 lcid--;
00065 xfscanf(in, "%k%le", "ini_cd", &iv);
00066 switch (Tp->tprob)
00067 {
00068 case stationary_problem :
00069 case nonlinear_stationary_problem:
00070 xfscanf(in, "%k%le", "cond", &con);
00071 break;
00072 case nonstationary_problem :
00073 case nonlinear_nonstationary_problem :
00074 case growing_np_problem:
00075 case growing_np_problem_nonlin:
00076 case discont_nonstat_problem:
00077 case discont_nonlin_nonstat_problem:
00078 cgf = new gfunct;
00079 if (cgf->read(in))
00080
00081 return(2);
00082 break;
00083 default :
00084 print_err("Unknown type of problem required", __FILE__, __LINE__, __func__);
00085 abort();
00086 }
00087 return(0);
00088 }
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102 long bocont::print(FILE *out)
00103 {
00104 fprintf(out, "%le ", iv);
00105 if (cgf)
00106 cgf->print(out);
00107 else
00108 fprintf(out, "%le\n", con);
00109
00110 return(0);
00111 }
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125 long bocont::compare(bocont &tbc)
00126 {
00127
00128 if (lcid != tbc.lcid)
00129 return 1;
00130
00131
00132 if (iv != tbc.iv)
00133 return 1;
00134
00135
00136
00137 if (cgf)
00138 return cgf->compare(*tbc.cgf);
00139
00140 if (con != tbc.con)
00141 return 1;
00142
00143 return 0;
00144 }