⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seismtool.cpp

📁 Finite element program for mechanical problem. It can solve various problem in solid problem
💻 CPP
字号:
#include <stdio.h>#include <stdlib.h>#include <math.h>#include "seismtool.h"#include "global.h"#include "node.h"seismtool::seismtool (void){  nsac=0;    direction = NULL;  seism = NULL;  gf = NULL;}seismtool::~seismtool (void){  delete [] direction;  delete [] seism;  delete [] gf;}/**   function reads input material parameters      @param in - pointer to input file      JK*/void seismtool::read (XFILE *in){  long i,j;    //  number of seismic acceleration components  xfscanf (in,"%ld",&nsac);  //  directions of seismic loads  direction = new dirdynload [nsac];    //  amplitude functions or response spectra  gf = new gfunct [nsac];  for (i=0;i<nsac;i++){    xfscanf (in,"%d",(int*)&direction[i]);  }    xfscanf (in,"%ld",&j);  if (j==0){    for (i=0;i<nsac;i++){      gf[i].read (in);    }  }  if (j==1){    char name[1001];    XFILE *accelin;    getnexttxt(in->file);    inputln (in->file,name,1000);    accelin = xfopen (name,"r");    for (i=0;i<nsac;i++){      gf[i].read (accelin);    }    xfclose (accelin);  }    //  array containing components of right hand side  seism = new double [Ndofm*nsac];  nullv (seism,Ndofm*nsac);  //  initiation of auxiliary vectors used in seismic loading  seisminit (seism);  }/**   function assembles auxiliary vector used in the right hand side   in seismic loading      @param seis - auxiliary vector      1.2.2005, JK*/void seismtool::seisminit (double *seism){  long i,j,k,n,ndofn,m,*cn;    n=Ndofm;  //  initiation of meaning of DOFs  Mt->alloc_meaning ();  //  definition of meaning of DOFs  Mt->define_meaning ();    //  loop over nodes  for (i=0;i<Mt->nn;i++){    //  number of DOFs on node    ndofn = Mt->give_ndofn (i);    cn = new long [ndofn];    //  code numbers of node DOFs    Mt->give_node_code_numbers (i,cn);        //  loop over node DOFs    for (j=0;j<ndofn;j++){      //  meaning of DOF      m = Mt->nodes[i].meaning[j];      if (cn[j]>0){	for (k=0;k<nsac;k++){	  if (m == direction[k])	    seism[n*k+cn[j]-1]=1.0;	}      }    }        delete [] cn;  }  }/**   function computes contributions to right hand side from seismic load      @param rhs - pointer to right hand side   @param time - actual time      JK, 21.8.2005*/void seismtool::assemble (double *rhs,double time){  long i,j,n;  double a,*aux;    n=Ndofm;  //  auxiliary array  aux = new double [n];    for (i=0;i<nsac;i++){    nullv (aux,n);        copyv (seism+i*n,aux,n);        //  scale factor    a=gf[i].getval(time);    //a=1.0;    //  updating of rhs array    for (j=0;j<n;j++){      rhs[j]-=a*aux[j];    }  }    delete [] aux;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -