00001 #include "edget.h"
00002 #include "globalt.h"
00003 #include "globmatt.h"
00004 #include <string.h>
00005
00006 edget::edget (void)
00007 {
00008 tm1 = NULL;
00009 tm2 = NULL;
00010 idm1 = NULL;
00011 idm2 = NULL;
00012
00013 jumpfn=NULL;
00014 jumpln=NULL;
00015
00016
00017 ncedval=0;
00018
00019 edval = NULL;
00020 }
00021
00022 edget::~edget (void)
00023 {
00024 delete [] tm1;
00025 delete [] tm2;
00026 delete [] idm1;
00027 delete [] idm2;
00028
00029 delete [] jumpfn;
00030 delete [] jumpln;
00031
00032
00033 ncedval=0;
00034
00035 delete [] edval;
00036 }
00037
00038
00039
00040
00041
00042
00043
00044
00045 void edget::init (long edid)
00046 {
00047 long i,eid1,eid2,ntm;
00048
00049
00050 eid1=Gtt->gedges[edid].adjel[0];
00051
00052 eid2=Gtt->gedges[edid].adjel[1];
00053
00054
00055 ntm=Tp->ntm*Tp->ntm;
00056
00057
00058 tm1 = new mattypet [ntm];
00059 idm1 = new long [ntm];
00060 tm2 = new mattypet [ntm];
00061 idm2 = new long [ntm];
00062
00063 for (i=0;i<ntm;i++){
00064 tm1[i]=Tt->elements[eid1].tm[i];
00065 idm1[i]=Tt->elements[eid1].idm[i];
00066
00067 tm2[i]=Tt->elements[eid2].tm[i];
00068 idm2[i]=Tt->elements[eid2].idm[i];
00069 }
00070
00071 jumpfn = new double [ntm];
00072 jumpln = new double [ntm];
00073 }
00074
00075
00076
00077
00078
00079
00080
00081
00082 void edget::compute_jump (long edid)
00083 {
00084 long lcid,ndofn,fn1,fn2,ln1,ln2;
00085 double *nvf1,*invf1,*nvf2,*invf2,*nvl1,*invl1,*nvl2,*invl2;
00086
00087
00088 lcid=0;
00089
00090
00091 fn1 = Gtt->gedges[edid].nlist[0];
00092 fn2 = Gtt->gedges[edid].nlist[1];
00093
00094 ln1 = Gtt->gedges[edid].nlist[2];
00095 ln2 = Gtt->gedges[edid].nlist[3];
00096
00097
00098 ndofn = Gtt->give_ndofn (fn1);
00099 nvf1 = new double [ndofn];
00100 nvf2 = new double [ndofn];
00101 invf1 = new double [ndofn];
00102 invf2 = new double [ndofn];
00103
00104 nodalval (lcid,nvf1,fn1);
00105 nodalval (lcid,nvf2,fn2);
00106
00107 initnodval (lcid,invf1,fn1);
00108 initnodval (lcid,invf2,fn2);
00109
00110
00111 ndofn = Gtt->give_ndofn (ln1);
00112 nvl1 = new double [ndofn];
00113 nvl2 = new double [ndofn];
00114 invl1 = new double [ndofn];
00115 invl2 = new double [ndofn];
00116
00117 nodalval (lcid,nvl1,ln1);
00118 nodalval (lcid,nvl2,ln2);
00119
00120 initnodval (lcid,invl1,ln1);
00121 initnodval (lcid,invl2,ln2);
00122
00123
00124 Tm->values_transformation (tm1[0],idm1[0],nvf1,invf1,tm2[0],idm2[0],nvf2,invf2,jumpfn);
00125 Tm->values_transformation (tm1[0],idm1[0],nvl1,invl1,tm2[0],idm2[0],nvl2,invl2,jumpln);
00126
00127 delete [] nvf1;
00128 delete [] nvf2;
00129 delete [] nvl1;
00130 delete [] nvl2;
00131 }
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146 void edget::compute_node_jump (long edid, long nodid,long lcid,double ncf)
00147 {
00148 long ndofn,n1,n2;
00149 double *nv1,*inv1,*nv2,*inv2;
00150
00151
00152 n1=-1;
00153 n2=-1;
00154
00155 if (nodid==1){
00156
00157 n1 = Gtt->gedges[edid].nlist[0];
00158 n2 = Gtt->gedges[edid].nlist[1];
00159 }
00160 if (nodid==2){
00161
00162 n1 = Gtt->gedges[edid].nlist[2];
00163 n2 = Gtt->gedges[edid].nlist[3];
00164 }
00165
00166 if (n1<0 || n2<0){
00167 print_err("wrong node is required",__FILE__,__LINE__,__func__);
00168 }
00169
00170
00171 ndofn = Gtt->give_ndofn (n1);
00172
00173 nv1 = new double [ndofn];
00174 nv2 = new double [ndofn];
00175 inv1 = new double [ndofn];
00176 inv2 = new double [ndofn];
00177
00178
00179 nodalval (lcid,nv1,n1);
00180 nodalval (lcid,nv2,n2);
00181
00182
00183 initnodval (lcid,inv1,n1);
00184 initnodval (lcid,inv2,n2);
00185
00186
00187 if (nodid==1){
00188 Tm->values_transformation (tm1[0],idm1[0],nv1,inv1,tm2[0],idm2[0],nv2,inv2,jumpfn);
00189 }
00190 if (nodid==2){
00191 Tm->values_transformation (tm1[0],idm1[0],nv1,inv1,tm2[0],idm2[0],nv2,inv2,jumpln);
00192 }
00193
00194 delete [] nv1;
00195 delete [] nv2;
00196 delete [] inv1;
00197 delete [] inv2;
00198 }
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209 void edget::init_edval (void)
00210 {
00211 ncedval = 1;
00212 edval = new double [ncedval];
00213 }
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225 void edget::store_edval (double *v)
00226 {
00227 long i;
00228
00229 for (i=0;i<ncedval;i++){
00230 edval[i]=v[i];
00231 }
00232 }
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244 void edget::give_edval (double *v)
00245 {
00246 long i;
00247
00248 for (i=0;i<ncedval;i++){
00249 v[i]=edval[i];
00250 }
00251 }
00252