00001 #ifndef SKYLINE_H
00002 #define SKYLINE_H
00003
00004 #include "matrix.h"
00005 #include "vector.h"
00006 #include "gtopology.h"
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 class skyline
00031 {
00032 public:
00033 skyline (void);
00034 ~skyline (void);
00035 void allocadr (long m);
00036 double* status ();
00037 long decomp ();
00038 void changedecomp ();
00039 void setfact ();
00040 void setnotfact ();
00041
00042 void column_lengths_elem (long *cn,long ndofe);
00043 void column_lengths_mult (long *ncn1,long *ncn2,long *mcn,long nm);
00044 void column_lengths (gtopology *top);
00045 void addresses ();
00046 void neglobmat ();
00047 void diagaddresses ();
00048 void allocglomat ();
00049 void localize (matrix &b,long *cn);
00050 void localized (double *b,long *cn,long m);
00051 void glocalize (matrix &b,long *rcn,long *ccn);
00052 void mult_localize (long nm,long *ncn1,long *ncn2,long *mcn);
00053 void nullsky ();
00054 void copy_sky (skyline &sky);
00055 void initiate (gtopology *top,long ndof,long mespr);
00056
00057
00058 void column_lengths_cr (long *cradr,long *ci);
00059 void mat_entries (long *cradr,long *ci,double *cra);
00060 void assemble_from_cr (long crn,long *cradr,long *crci,double *cra);
00061
00062
00063 void column_lengths_scr (long *scradr,long *scrci,long *se);
00064 void mat_entries_scr (long *scradr,long *scrci,double *scra,long *se);
00065 void assemble_from_scr (long *scradr,long *scrci,double *scra,long neq,long *se);
00066
00067
00068 void ldl_sky (double *x,double *y,double zero,long tc);
00069
00070 long auxmax(long i,long j);
00071 long auxmin(long i,long j);
00072 void ldl_sky3 (double *x,double *y,long tc);
00073 void ldl_sky4 (double *x,double *y,long tc);
00074 void ldl_sky_10 (double *x,double *y,double zero,long tc);
00075 void eliminuj_4i_rev(double *a,long n,long s);
00076 void napln_a(long i1,long i2,long band,double *pole,double *a,long *adr);
00077 void uloz_a(long i1,long i2,long band,double *pole,double *a,long *adr);
00078 void napln_b(long i1,long i2,long band,double *pole,double *b,long *adr);
00079 void uloz_b(long i1,long i2,long band,double *pole,double *b,long *adr);
00080 void faze1_block3(double *a,double *b,long n,long s,long n2,long s2);
00081 void faze2_block3(double *a,double *b,long n,long s,long n2,long s2);
00082 void blokove2(double *pole,long *adr,long n, long band);
00083
00084
00085 void mxv_sky (double *b,double *c);
00086 void utv (double *b,double *c);
00087 void ltv (double *b,double *c);
00088 void ldlmxv_sky (double *b,double *c);
00089 void addmat_sky (double c,skyline &sky);
00090 void scalmat_sky (double c);
00091 void ker (double *r,long &nse,long *se,long ense,double limit,long tc);
00092 void ldlkon_sky (double *b,double *c,double *x,double *y,long m,long tc);
00093
00094 double ldlkoncount_sky (double *b,double *c,double *x,double *y,long m,long tc);
00095
00096 void ldl_feti_sky (double *x,double *y,long nse,long *se,double zero);
00097 void ldl_a12block (double *block,long nrdof);
00098 void printmat (FILE *out);
00099 void printdiag (FILE *out);
00100
00101 double give_entry (long ri,long ci);
00102 void add_entry (double e,long ri,long ci);
00103 long give_negm ();
00104
00105 void diag_scale (double *d);
00106 void select_submatrix(skyline *smsky,long nsdof,long *sdof,FILE *out);
00107
00108 void diag_check (double thr);
00109
00110
00111
00112 long n;
00113
00114 long negm;
00115
00116 long *adr;
00117
00118 double *a;
00119
00120
00121
00122
00123 long decompid;
00124
00125 };
00126
00127 #endif