二维动态有限差分程序

DynamicFDM.java


package scu.edu.fem;



 class FDMETNode_2D{                            //单元结点结构体
    double x=0,y=0;                            //单元结点坐标
    int number=0;                            //单元结点在总体区域划分中的编号
     double accX;                            //节点加速度
     double accY;                            //节点加速度
     double velocityX;                        //节点速度矩阵
     double velocityY;                        //节点速度矩阵
    
     double displacementX;                    //节点速度矩阵

     double displacementY;                    //节点速度矩阵
}

class FDMElementTriangle_2D implements Cloneable{                    //四边形单元结构体    
    FDMETNode_2D nd[]=new FDMETNode_2D[]{new FDMETNode_2D(),new FDMETNode_2D(),new FDMETNode_2D(),new FDMETNode_2D()};                        //存储相对应的总体结点号
    double    a[]=new double[3];
    double    b[]=new double[3];
    double    c[]=new double[3];                //基函数的系数
    double    A;                            //单元面积


    double    sigmaX,sigmaY,sigmaZ,sigmaXY;    //正应力,及剪切应力
    double    strainX,strainY,strainXY;    //正应变,及剪切应变
    
    double    fi[]=new double[3];                            //单元上的积分值
    double strainRatioX;                    //单元应变率
    double strainRatioY;                    //单元应变率
    double strainRatioXY;                    //单元应变率XY
    double p,Sx,Sy,Sxy;
//    clone(){
//        
//    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        // TODO Auto-generated method stub
        return super.clone();
    }

}
public class DynamicFDM_2D {

    // int    i;                                //单元的循环指标
    // int j;
    // int k;
    //int id;
    
 static double dBig=1000000000000000000000000000000f;
//jimmy change for test
//const int nx=1,ny=1;                //x,y方向划分网格数,三角形单元个数=nx*ny*2


//jimmy change for test 必须为奇数
final static int nx=100,ny=100;                //x,y方向划分网格数,三角形单元个数=nx*ny*2

//const int nx=21,ny=21;                //x,y方向划分网格数,三角形单元个数=nx*ny*2
final static double Lx=10;                //矩形区域的两边长
final static double Ly=10;

static double    D;                            //单元矩阵行列式值

static double    E=10000f;                //模量
static double    t=1.0;                        //厚度
static double    u=0.3;                        //泊松比

static double    rou=1.0;                            //密度
static double    Y=0.1;                            //阻尼系数

static double T=10;
static double    dataT=0.001;                            //时间步长


static double    gama=0.5;                            //参数gama>=0.5
static double    bata=1;//0.25*(0.5+gama)*(0.5+gama);    //参数bata
static double    c0=1/(bata*dataT*dataT);            //参数c0
static double    c1=gama/(bata*dataT);                //参数c1
static double    c2=1/(bata*dataT);                    //参数c2
static double    c3=1/(bata*2)-1;                    //参数c3
static double    c4=gama/bata-1;                        //参数c4
static double    c5=dataT/2*(c4-1);                    //参数c5
static double    c6=dataT*(1-gama);                    //参数c6
static double    c7=gama*dataT;                        //参数c7
static double pMatrix[];                    //总体K矩阵指针
static double totalM[];                    //总体质量M矩阵指针
static double totalC[];                    //总体阻尼C矩阵指针

static double total_accX[];                    //节点加速度指针
static double total_accY[];                    //节点加速度指针

static double total_velocityX[];                    //节点速度矩阵指针
static double total_velocityY[];                    //节点速度矩阵指针

static double total_displacementX[];                    //节点速度矩阵指针
static double total_displacementY[];                    //节点速度矩阵指针

static double total_strainRatioX[];                    //总体应变率矩阵指针
static double total_strainRatioY[];                    //总体应变率矩阵指针

//总外力Fx,Fy
static double Fx[];                        //f向量指针
static double Fy[];                        //f向量指针
static double tmp[];
static FDMElementTriangle_2D[] pE;                //单元三角形结构体数组指针
double ai,bi,ci;                    //基函数的系数


//-----------------------------------------------------
    double fn(int n , double x[])//被积函数,高斯积分函数的参数
    {
        return(ai+bi*x[0]+ci*x[1]);
    }
    


    public static void main(String[] args) {
        
        
        
        //--------------  全局变量  ---------------------------
        
        DynamicFDM_2D staticFEM=new DynamicFDM_2D();


           final int iNode=(nx+1)*(nx+1);        //结点个数
            


            pE=new FDMElementTriangle_2D[nx*ny];
            for(int i=0;i<nx*ny;i++)
                pE[i]=new FDMElementTriangle_2D();    
            
            total_displacementX=new double[iNode];
               total_velocityX=new double[iNode];
               total_accX=new double[iNode];
               
               total_displacementY=new double[iNode];
               total_velocityY=new double[iNode];
               total_accY=new double[iNode];
               
                total_strainRatioX=new double[iNode];
                total_strainRatioY=new double[iNode];

            //jimmy 修改为2*iNode,因为有x,y两个方向载荷或约束
            Fx=new double[iNode];
            Fy=new double[iNode];
            //tmp=new double[2*iNode];
        
            

            for(int i=0;i<iNode;i++)
            Fx[i]=0.0;

        try{
            //------    计算得到网格的信息    -----------
            for(int j=0;j<nx;j++)
            for(int i=0;i<ny;i++)
            {    
                
                
                //for the first triangle in the rectangle,与总体网格保持一致
                //2-----3
                //|     |
                //0-----1
                pE[i+j*ny].nd[0].x=(Lx/nx)*i;            
                pE[i+j*ny].nd[0].y=(Ly/ny)*j;
                pE[i+j*ny].nd[0].number=i+j*(nx+1);            //NO.0
                

                pE[i+j*ny].nd[1].x=(Lx/nx)*(i+1);
                pE[i+j*ny].nd[1].y=(Ly/ny)*j;
                pE[i+j*ny].nd[1].number=i+j*(nx+1)+1;        //NO.1


                pE[i+j*ny].nd[2].x=(Lx/nx)*i;
                pE[i+j*ny].nd[2].y=(Ly/ny)*(j+1);
                pE[i+j*ny].nd[2].number=i+(nx+1)*(j+1);        //NO.2
                
                pE[i+j*ny].nd[3].x=(Lx/nx)*(i+1);
                pE[i+j*ny].nd[3].y=(Ly/ny)*(j+1);
                pE[i+j*ny].nd[3].number=i+1+(nx+1)*(j+1);    //NO.3

    
            
                
            }
            //System.out.println("计算基函数系数值...\n");
            int j=1,k=2;
            for(int id=0;id<nx*ny;id++)
            {
                
                    
                    pE[id].A=(pE[id].nd[1].x-pE[id].nd[0].x)*(pE[id].nd[2].y-pE[id].nd[0].y);
                    D=pE[id].A;

                }
        

        //--------------------------------------计算单元有限元特征式系数矩阵可以不再分两个三角形循环
        
//            for(int i=0;i<nx*ny;i++)
//            {    
//                pE[i].strainRatioX=((pE[i].nd[0].velocityX-pE[i].nd[2].velocityX)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].velocityX-pE[i].nd[3].velocityX)*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);                
//                pE[i].strainRatioY=-((pE[i].nd[0].velocityY-pE[i].nd[2].velocityY)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].velocityY-pE[i].nd[3].velocityY)*(pE[i].nd[0].x-pE[i].nd[2].x))/(2*pE[i].A);    
//                pE[i].strainRatioXY=((pE[i].nd[0].velocityY-pE[i].nd[2].velocityY)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].velocityY-pE[i].nd[3].velocityY+(pE[i].nd[0].velocityX-pE[i].nd[2].velocityX)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].velocityX-pE[i].nd[3].velocityX)*(pE[i].nd[0].x-pE[i].nd[2].x))*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);
//                
//                pE[i].strainX=((pE[i].nd[0].displacementX-pE[i].nd[2].displacementX)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].displacementX-pE[i].nd[3].displacementX)*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);;
//                pE[i].strainY=-((pE[i].nd[0].displacementY-pE[i].nd[2].displacementY)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].displacementY-pE[i].nd[3].displacementY)*(pE[i].nd[0].x-pE[i].nd[2].x))/(2*pE[i].A);;
//                
//            
//                pE[i].strainXY=((pE[i].nd[0].displacementY-pE[i].nd[2].displacementY)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].displacementY-pE[i].nd[3].displacementY+(pE[i].nd[0].displacementX-pE[i].nd[2].displacementX)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].displacementX-pE[i].nd[3].displacementX)*(pE[i].nd[0].x-pE[i].nd[2].x))*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);
//                
//                //平面应变
//                //pE[i].p=E*(pE[i].strainX+pE[i].strainY)*(1-u)/(3*(1-2*u));
//                //pE[i].Sx=E*((2-u)*pE[i].strainX-(1+u)*pE[i].strainY)/(3*(1+u));
//                //pE[i].Sy=E*((2-u)*pE[i].strainY-(1+u)*pE[i].strainX)/(3*(1+u));
//                
//                //平面应力
//                pE[i].p=E*(pE[i].strainX+pE[i].strainY)/(3*(1-2*u));
//                pE[i].Sx=E*(2*pE[i].strainX-pE[i].strainY)/(3*(1+u));
//                pE[i].Sy=E*(2*pE[i].strainY-pE[i].strainX)/(3*(1+u));
//                pE[i].sigmaX=pE[i].p+pE[i].Sx;
//                pE[i].sigmaY=pE[i].p+pE[i].Sy;
//                pE[i].sigmaXY=E*pE[i].strainXY/(1+u);
//                
//                //节点x方向力
//                FDMElementTriangle_2D tmpA=null,tmpB=null,tmpC=null,tmpD=null,tmpE=null,tmpF=null,tmpG=null,tmpH=null,tmpI=null,tmpJ=null;
//                if((i-nx-1)<0)
//                    tmpA=(FDMElementTriangle_2D)pE[i].clone();
//                else{
//                    tmpA=pE[i-nx-1];
//                }
//                
//                if((i-nx)<0)
//                    tmpB=(FDMElementTriangle_2D)pE[i].clone();
//                else{
//                    tmpB=pE[i-nx];
//                }
//                
//                if((i-1)<0)
//                    tmpC=(FDMElementTriangle_2D)pE[i].clone();
//                else{
//                    tmpC=pE[i-1];
//                }
//                Fx[pE[i].nd[0].number ]+=(tmpA.sigmaX*(tmpA.nd[1].y-tmpA.nd[2].y)-tmpA.sigmaXY*(tmpA.nd[1].x-tmpA.nd[2].x)+
//                                            tmpB.sigmaX*(tmpB.nd[3].y-tmpB.nd[0].y)-tmpB.sigmaXY*(tmpB.nd[3].x-tmpB.nd[0].x)+
//                                            pE[i].sigmaX*(pE[i].nd[2].y-pE[i].nd[1].y)-pE[i].sigmaXY*(pE[i].nd[2].x-pE[i].nd[1].x)+
//                                            tmpC.sigmaX*(tmpC.nd[0].y-tmpC.nd[3].y)-tmpC.sigmaXY*(tmpC.nd[0].x-tmpC.nd[3].x)
//                                            );
//                
//                if((i-nx+1)<0){
//                    tmpE=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpE=pE[i-nx+1];
//                }
//                if((i+1)>=nx*ny){
//                    tmpD=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpD=pE[i+1];
//                }
//                Fx[pE[i].nd[1].number ]+=(tmpB.sigmaX*(tmpB.nd[1].y-tmpB.nd[2].y)-tmpB.sigmaXY*(tmpB.nd[1].x-tmpB.nd[2].x)+
//                        tmpE.sigmaX*(tmpE.nd[3].y-tmpE.nd[0].y)-tmpE.sigmaXY*(tmpE.nd[3].x-tmpE.nd[0].x)+
//                        tmpD.sigmaX*(tmpD.nd[2].y-tmpD.nd[1].y)-tmpD.sigmaXY*(tmpD.nd[2].x-tmpD.nd[1].x)+
//                        pE[i].sigmaX*(pE[i].nd[0].y-pE[i].nd[3].y)-pE[i].sigmaXY*(pE[i].nd[0].x-pE[i].nd[3].x)
//                        );
//                if((i-1)<0){
//                    tmpF=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpF=pE[i-1];
//                }
//                if((i+nx)>=nx*ny){
//                    tmpG=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpG=pE[i+nx];
//                }
//                if((i+1)>=nx*ny){
//                    tmpH=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpH=pE[i+1];
//                }
//                if((i+nx-1)>=nx*ny){
//                    tmpI=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpI=pE[i+nx-1];
//                }
//                if((i+nx+1)>=nx*ny){
//                    tmpJ=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpJ=pE[i+nx+1];
//                }
//                Fx[pE[i].nd[2].number ]+=(tmpF.sigmaX*(tmpF.nd[1].y-tmpF.nd[2].y)-tmpF.sigmaXY*(tmpF.nd[1].x-tmpF.nd[2].x)+
//                        pE[i].sigmaX*(pE[i].nd[3].y-pE[i].nd[0].y)-pE[i].sigmaXY*(pE[i].nd[3].x-pE[i].nd[0].x)+
//                        tmpG.sigmaX*(tmpG.nd[2].y-tmpG.nd[1].y)-tmpG.sigmaXY*(tmpG.nd[2].x-tmpG.nd[1].x)+
//                        tmpI.sigmaX*(tmpI.nd[0].y-tmpI.nd[3].y)-tmpI.sigmaXY*(tmpI.nd[0].x-tmpI.nd[3].x)
//                        );
//                Fx[pE[i].nd[3].number ]+=(pE[i].sigmaX*(pE[i].nd[1].y-pE[i].nd[2].y)-pE[i].sigmaXY*(pE[i].nd[1].x-pE[i].nd[2].x)+
//                        tmpH.sigmaX*(tmpH.nd[3].y-tmpH.nd[0].y)-tmpH.sigmaXY*(tmpH.nd[3].x-tmpH.nd[0].x)+
//                        tmpJ.sigmaX*(tmpJ.nd[2].y-tmpJ.nd[1].y)-tmpJ.sigmaXY*(tmpJ.nd[2].x-tmpJ.nd[1].x)+
//                        tmpG.sigmaX*(tmpG.nd[0].y-tmpG.nd[3].y)-tmpG.sigmaXY*(tmpG.nd[0].x-tmpG.nd[3].x)  
//                        );   
//                
//                //节点y方向力
//                FDMElementTriangle_2D tmpyA=null,tmpyB=null,tmpyC=null,tmpyE=null,tmpyF=null,tmpyG=null,tmpyH=null,tmpyI=null,tmpyJ=null;
//                if((i-nx-1)<0)
//                    tmpyA=(FDMElementTriangle_2D)pE[i].clone();
//                else{
//                    tmpyA=pE[i-nx-1];
//                }
//                
//                if((i-nx)<0)
//                    tmpyB=(FDMElementTriangle_2D)pE[i].clone();
//                else{
//                    tmpyB=pE[i-nx];
//                }
//                
//                if((i-1)<0)
//                    tmpyC=(FDMElementTriangle_2D)pE[i].clone();
//                else{
//                    tmpyC=pE[i-1];
//                }
//                Fy[pE[i].nd[0].number ]+=(tmpyA.sigmaXY*(tmpyA.nd[1].y-tmpyA.nd[2].y)-tmpyA.sigmaY*(tmpyA.nd[1].x-tmpyA.nd[2].x)+
//                                            tmpyB.sigmaXY*(tmpyB.nd[3].y-tmpyB.nd[0].y)-tmpyB.sigmaY*(tmpyB.nd[3].x-tmpyB.nd[0].x)+
//                                            pE[i].sigmaXY*(pE[i].nd[2].y-pE[i].nd[1].y)-pE[i].sigmaY*(pE[i].nd[2].x-pE[i].nd[1].x)+
//                                            tmpyC.sigmaXY*(tmpyC.nd[0].y-tmpyC.nd[3].y)-tmpyC.sigmaY*(tmpyC.nd[0].x-tmpyC.nd[3].x)
//                                            );
//                
//                if((i-nx+1)<0){
//                    tmpyE=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpyE=pE[i-nx+1];
//                }
//                
//                //
//                if((i+1)>=nx*ny){
//                    tmpyG=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpyG=pE[i+1];
//                }
//                if((i+nx)>=nx*ny){
//                    tmpyH=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpyH=pE[i+nx];
//                }
//                if((i+nx-1)>=nx*ny){
//                    tmpyI=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpyI=pE[i+nx-1];
//                }
//                if((i+nx+1)>=nx*ny){
//                    tmpyJ=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpyJ=pE[i+nx+1];
//                }
//                Fy[pE[i].nd[1].number ]+=(tmpyB.sigmaXY*(tmpyB.nd[1].y-tmpyB.nd[2].y)-tmpyB.sigmaY*(tmpyB.nd[1].x-tmpyB.nd[2].x)+
//                        tmpyE.sigmaXY*(tmpyE.nd[3].y-tmpyE.nd[0].y)-tmpyE.sigmaY*(tmpyE.nd[3].x-tmpyE.nd[0].x)+
//                        tmpyG.sigmaXY*(tmpyG.nd[2].y-tmpyG.nd[1].y)-tmpyG.sigmaY*(tmpyG.nd[2].x-tmpyG.nd[1].x)+
//                        pE[i].sigmaXY*(pE[i].nd[0].y-pE[i].nd[3].y)-pE[i].sigmaY*(pE[i].nd[0].x-pE[i].nd[3].x)
//                        );
//                if((i-1)<0){
//                    tmpyF=(FDMElementTriangle_2D)pE[i].clone();
//                }
//                else{
//                    tmpyF=pE[i-1];
//                }
//                Fy[pE[i].nd[2].number ]+=(tmpyF.sigmaXY*(tmpyF.nd[1].y-tmpyF.nd[2].y)-tmpyF.sigmaY*(tmpyF.nd[1].x-tmpyF.nd[2].x)+
//                        pE[i].sigmaXY*(pE[i].nd[3].y-pE[i].nd[0].y)-pE[i].sigmaY*(pE[i].nd[3].x-pE[i].nd[0].x)+
//                        tmpyH.sigmaXY*(tmpyH.nd[2].y-tmpyH.nd[1].y)-tmpyH.sigmaY*(tmpyH.nd[2].x-tmpyH.nd[1].x)+
//                        tmpyI.sigmaXY*(tmpyI.nd[0].y-tmpyI.nd[3].y)-tmpyI.sigmaY*(tmpyI.nd[0].x-tmpyI.nd[3].x)
//                        );
//                Fy[pE[i].nd[3].number ]+=(pE[i].sigmaXY*(pE[i].nd[1].y-pE[i].nd[2].y)-pE[i].sigmaY*(pE[i].nd[1].x-pE[i].nd[2].x)+
//                        tmpyG.sigmaXY*(tmpyG.nd[3].y-tmpyG.nd[0].y)-tmpyG.sigmaY*(tmpyG.nd[3].x-tmpyG.nd[0].x)+
//                        tmpyJ.sigmaXY*(tmpyJ.nd[2].y-tmpyJ.nd[1].y)-tmpyJ.sigmaY*(tmpyJ.nd[2].x-tmpyJ.nd[1].x)+
//                        tmpyH.sigmaXY*(tmpyH.nd[0].y-tmpyH.nd[3].y)-tmpyH.sigmaY*(tmpyH.nd[0].x-tmpyH.nd[3].x)
//                        );
//                
//                
//                total_accX[pE[i].nd[0].number]=Fx[pE[i].nd[0].number ]/(rou*(Lx/nx));
//                total_accX[pE[i].nd[0].number]=Fx[pE[i].nd[0].number ]/(rou*(Ly/ny));
//                
//                total_accX[pE[i].nd[1].number]=Fx[pE[i].nd[1].number ]/(rou*(Lx/nx));
//                total_accX[pE[i].nd[1].number]=Fx[pE[i].nd[1].number ]/(rou*(Ly/ny));
//                
//                total_accX[pE[i].nd[2].number]=Fx[pE[i].nd[2].number ]/(rou*(Lx/nx));
//                total_accX[pE[i].nd[2].number]=Fx[pE[i].nd[2].number ]/(rou*(Ly/ny));
//                
//                total_accX[pE[i].nd[3].number]=Fx[pE[i].nd[3].number ]/(rou*(Lx/nx));
//                total_accX[pE[i].nd[3].number]=Fx[pE[i].nd[3].number ]/(rou*(Ly/ny));
//            }





        //---------------------------计算三角形单元f函数向量不用多重积分公式,直接代用单元三角形面积的三分之一  
            int idx=0;                                    
            for(int i=0;i<nx*ny;i++)
            {   for(idx=0;idx<3;idx++)
               {
                 pE[i].fi[idx]=(Lx/nx)*(Ly/ny);         // Respaired
            }
            }

            //单元矩阵元素累加到总体矩阵相应的位置上,共四个节点,两个单元
        //  2    |-------|3
        //        | I  .    |    
        //        | .    II    |
        //  0    |-------|1
        
        //double dBig=pow(10,20);                //边界条件对角线扩大法处理所用的大数
//            double Ur=0.0;                        //边界条件1(边界条件2通过Calerkin弱解表达式自动满足)

            double Ur=1.23  ;         //外力,牛
            
            /*
             *
             * jimmy 上下拉伸约束
             */

            //上端2,3节点,Y方向拉力 索引为5,7
//            for(int i=0;i<nx+1;i++)
//            {
//                
//                Fx[(nx+1)*nx*2+2*i+1]=Ur;
//            }
            
            //下端0,1节点,Y方向拉力为负 ,索引为1,3
            // 位移  ,索引
            //  u0,     0
            //    v0,     1
            //    u1,        2
            //  v1,        3
            //  u2,     4
            //  v2,     5
            //  u3,     6
            //  v3,     7

            //设置为y方向为0位移,参考王勋成的书

                for(int n=0;n<nx+1;n++)
            {
            
            total_accX[n]=0;
            total_accY[n]=0;
            total_velocityX[n]=0;
            total_velocityY[n]=0;

total_displacementX[n]=0;
total_displacementY[n]=0;
            }



            //第一步求t=0加速度的,结果在Fx中
            //假设t=0,速度和位移为0
            
//        for(int i=0;i<2*iNode;i++)
//            tmp[i]=Fx[i];

    
            //假设初始加速度为确定值
        for(int i=iNode-(nx+1);i<iNode;i++)
        {    
            
            total_displacementY[i]=0.01;
            total_accY[i]=-1;
            Fy[i]=Math.sqrt(E)*total_velocityY[i];
            
        }

        //增加时间步长的内容
    //    double p=0,Sx=0,Sy=0,Sxy=0;
        double p=0,Sx=0,Sy=0,Sxy=0;
            for(int step=1;step<T/dataT;step++)
            {    
                for(int n=0;n<nx+1;n++)
                {
                
                total_accX[n]=0;
                total_accY[n]=0;
                total_velocityX[n]=0;
                total_velocityY[n]=0;

                total_displacementX[n]=0;
                total_displacementY[n]=0;
                }
            
                
//double tmpX[]=total_velocityX;                        
                
                // total_strainRatioX[i]=(-total_velocityX[i])/(Lx);

                
                //FDMElementTriangle_2D tmpA=null,tmpB=null,tmpC=null,tmpE=null,tmpF=null;
                //节点y方向力
                //FDMElementTriangle_2D tmpyA=null,tmpyB=null,tmpyC=null,tmpyE=null,tmpyF=null;
                
                for(int i=0;i<nx*ny;i++)
                {
                    pE[i].nd[0].velocityX=total_velocityX[pE[i].nd[0].number];
                    pE[i].nd[0].velocityY=total_velocityY[pE[i].nd[0].number];
                    
                    pE[i].nd[1].velocityX=total_velocityX[pE[i].nd[1].number];
                    pE[i].nd[1].velocityY=total_velocityY[pE[i].nd[1].number];
                    
                    pE[i].nd[2].velocityX=total_velocityX[pE[i].nd[2].number];
                    pE[i].nd[2].velocityY=total_velocityY[pE[i].nd[2].number];
                    
                    pE[i].nd[3].velocityX=total_velocityX[pE[i].nd[3].number];
                    pE[i].nd[3].velocityY=total_velocityY[pE[i].nd[3].number];
                    
                    pE[i].nd[0].displacementX=total_displacementX[pE[i].nd[0].number];
                    pE[i].nd[0].displacementY=total_displacementY[pE[i].nd[0].number];
                    
                    pE[i].nd[1].displacementX=total_displacementX[pE[i].nd[1].number];
                    pE[i].nd[1].displacementY=total_displacementY[pE[i].nd[1].number];
                    
                    pE[i].nd[2].displacementX=total_displacementX[pE[i].nd[2].number];
                    pE[i].nd[2].displacementY=total_displacementY[pE[i].nd[2].number];
                    
                    pE[i].nd[3].displacementX=total_displacementX[pE[i].nd[3].number];
                    pE[i].nd[3].displacementY=total_displacementY[pE[i].nd[3].number];
                    
                    pE[i].nd[0].accX=total_accX[pE[i].nd[0].number];
                    pE[i].nd[0].accY=total_accY[pE[i].nd[0].number];
                    
                    pE[i].nd[1].accX=total_accX[pE[i].nd[1].number];
                    pE[i].nd[1].accY=total_accY[pE[i].nd[1].number];
                    
                    pE[i].nd[2].accX=total_accX[pE[i].nd[2].number];
                    pE[i].nd[2].accY=total_accY[pE[i].nd[2].number];
                    
                    pE[i].nd[3].accX=total_accX[pE[i].nd[3].number];
                    pE[i].nd[3].accY=total_accY[pE[i].nd[3].number];
                    
                }
                for(int i=0;i<nx*ny;i++)
                {    
                    pE[i].strainRatioX=((pE[i].nd[0].velocityX-pE[i].nd[2].velocityX)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].velocityX-pE[i].nd[3].velocityX)*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);                
                    pE[i].strainRatioY=-((pE[i].nd[0].velocityY-pE[i].nd[2].velocityY)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].velocityY-pE[i].nd[3].velocityY)*(pE[i].nd[0].x-pE[i].nd[2].x))/(2*pE[i].A);    
                    pE[i].strainRatioXY=((pE[i].nd[0].velocityY-pE[i].nd[2].velocityY)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].velocityY-pE[i].nd[3].velocityY+(pE[i].nd[0].velocityX-pE[i].nd[2].velocityX)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].velocityX-pE[i].nd[3].velocityX)*(pE[i].nd[0].x-pE[i].nd[2].x))*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);
                    
                    pE[i].strainX=((pE[i].nd[0].displacementX-pE[i].nd[2].displacementX)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].displacementX-pE[i].nd[3].displacementX)*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);;
                    pE[i].strainY=-((pE[i].nd[0].displacementY-pE[i].nd[2].displacementY)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].displacementY-pE[i].nd[3].displacementY)*(pE[i].nd[0].x-pE[i].nd[2].x))/(2*pE[i].A);;
                    
                
                    pE[i].strainXY=((pE[i].nd[0].displacementY-pE[i].nd[2].displacementY)*(pE[i].nd[1].y-pE[i].nd[3].y)-(pE[i].nd[1].displacementY-pE[i].nd[3].displacementY+(pE[i].nd[0].displacementX-pE[i].nd[2].displacementX)*(pE[i].nd[1].x-pE[i].nd[3].x)-(pE[i].nd[1].displacementX-pE[i].nd[3].displacementX)*(pE[i].nd[0].x-pE[i].nd[2].x))*(pE[i].nd[0].y-pE[i].nd[2].y))/(2*pE[i].A);
                    
                    //平面应变strainZ=0
                    //pE[i].p=E*(pE[i].strainX+pE[i].strainY)/(3*(1-2*u));
                    //pE[i].Sx+=E*((2-3*u)*pE[i].strainRatioX/(1-2*u)-(1-3*u)*pE[i].strainY/(1-2*u))/(3*(1+u));
                    
                    //pE[i].Sy+=E*((2-3*u)*pE[i].strainRatioY/(1-2*u)-(1-3*u)*pE[i].strainX/(1-2*u)))/(3*(1+u));
                    //pE[i].Sz+=-E*(1+2*u)(pE[i].strainRatioX+pE[i].strainRatioX)/(3*(1-u+2*u*u));
                    

                    pE[i].p=pE[i].p+dataT*E*(pE[i].strainRatioX+pE[i].strainRatioX)/(3*(1-2*u));
                    pE[i].Sx=pE[i].Sx+dataT*E*(2*pE[i].strainRatioX-pE[i].strainRatioY)/(3*(1+u))+0.5*(pE[i].Sx-pE[i].Sy)*(Math.cos(2*dataT*pE[i].strainRatioXY)-1)-pE[i].Sxy*Math.sin(2*dataT*pE[i].strainRatioXY);                                
                    pE[i].Sy=pE[i].Sy+dataT*E*(2*pE[i].strainRatioY-pE[i].strainRatioX)/(3*(1+u))-0.5*(pE[i].Sx-pE[i].Sy)*(Math.cos(2*dataT*pE[i].strainRatioXY)-1)+pE[i].Sxy*Math.sin(2*dataT*pE[i].strainRatioXY);;                
                    pE[i].Sxy=pE[i].Sxy+dataT*E*(pE[i].strainRatioXY)/((1+u))+0.5*(pE[i].Sx-pE[i].Sy)*(Math.sin(2*dataT*pE[i].strainRatioXY))+pE[i].Sxy*(Math.cos(2*dataT*pE[i].strainRatioXY)-1);    
                    pE[i].sigmaX=pE[i].p+pE[i].Sx;
                    pE[i].sigmaY=pE[i].p+pE[i].Sy;
                    pE[i].sigmaXY=E*pE[i].Sxy;
                    
                    
//                    pE[i].p=E*(pE[i].strainX+pE[i].strainY)/(3*(1-2*u));
//                    pE[i].Sx=E*((2-3*u)*pE[i].strainRatioX/(1-2*u)-(1-3*u)*pE[i].strainY/(1-2*u))/(3*(1+u));
//                    pE[i].Sy=E*((2-3*u)*pE[i].strainRatioY/(1-2*u)-(1-3*u)*pE[i].strainX/(1-2*u))/(3*(1+u));
//                    
//                    
//                    pE[i].sigmaX=pE[i].p+pE[i].Sx;
//                    pE[i].sigmaY=pE[i].p+pE[i].Sy;
                    //pE[i].sigmaXY=E*pE[i].Sxy;
                    
                    //平面应力
                    
                    //只有y方向的位移,应变,(以及引起的x的方向的)
                    //p=(E*displacementX/Lx/3);
                    //Sy=(E*2*strainRatioY*dataT/3/2);
                    //Sy=(E/(1+u)*(strainRatioY-0.33333*total_eratio)*dataT);//-0.5*(Sx-Sy)*(Math.cos(2*dataT*strainRatioXY)-1)-Sxy*Math.sin(2*dataT*strainRatioXY)
                //    Sxy=(E/(1+u)*(strainRatioXY)*dataT);
//                    
//                    pE[i].p=E*(pE[i].strainX+pE[i].strainY)*(1-u)/(3*(1-2*u));
//                    pE[i].Sx=pE[i].Sx+dataT*E*((2-u)*pE[i].strainRatioX-(1+u)*pE[i].strainRatioY)/(3*(1+u))+0.5*(pE[i].Sx-pE[i].Sy)*(Math.cos(2*dataT*pE[i].strainRatioXY)-1)-pE[i].Sxy*Math.sin(2*dataT*pE[i].strainRatioXY);
//                    
//                    pE[i].Sy=pE[i].Sy+dataT*E*((2-u)*pE[i].strainRatioY-(1+u)*pE[i].strainRatioX)/(3*(1+u))-0.5*(pE[i].Sx-pE[i].Sy)*(Math.cos(2*dataT*pE[i].strainRatioXY)-1)+pE[i].Sxy*Math.sin(2*dataT*pE[i].strainRatioXY);;
//                    
//                    pE[i].Sxy=pE[i].Sxy+dataT*E*(pE[i].strainRatioXY)/((1+u))+0.5*(pE[i].Sx-pE[i].Sy)*(Math.sin(2*dataT*pE[i].strainRatioXY))+pE[i].Sxy*(Math.cos(2*dataT*pE[i].strainRatioXY)-1);
//                    
//                    pE[i].sigmaX=pE[i].p+pE[i].Sx;
//                    pE[i].sigmaY=pE[i].p+pE[i].Sy;
//                    pE[i].sigmaXY=E*pE[i].Sxy;
                    

                    //节点x方向力
                    FDMElementTriangle_2D tmpA=null,tmpB=null,tmpC=null,tmpD=null,tmpE=null,tmpF=null,tmpG=null,tmpH=null,tmpI=null,tmpJ=null;
                    if((i-nx-1)<0)
                        tmpA=(FDMElementTriangle_2D)pE[i].clone();
                    
                    else{
                        tmpA=pE[i-nx-1];
                    }
                    
                    if((i-nx)<0)
                        tmpB=(FDMElementTriangle_2D)pE[i].clone();
                    else{
                        tmpB=pE[i-nx];
                    }
                    
                    if((i-1)<0)
                        tmpC=(FDMElementTriangle_2D)pE[i].clone();
                    else{
                        tmpC=pE[i-1];
                    }
                    Fx[pE[i].nd[0].number ]=(tmpA.sigmaX*(tmpA.nd[1].y-tmpA.nd[2].y)-tmpA.sigmaXY*(tmpA.nd[1].x-tmpA.nd[2].x)+
                                                tmpB.sigmaX*(tmpB.nd[3].y-tmpB.nd[0].y)-tmpB.sigmaXY*(tmpB.nd[3].x-tmpB.nd[0].x)+
                                                pE[i].sigmaX*(pE[i].nd[2].y-pE[i].nd[1].y)-pE[i].sigmaXY*(pE[i].nd[2].x-pE[i].nd[1].x)+
                                                tmpC.sigmaX*(tmpC.nd[0].y-tmpC.nd[3].y)-tmpC.sigmaXY*(tmpC.nd[0].x-tmpC.nd[3].x)
                                                );
                    
                    if((i-nx+1)<0){
                        tmpE=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpE=pE[i-nx+1];
                    }
                    if((i+1)>=nx*ny){
                        tmpD=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpD=pE[i+1];
                    }
                    Fx[pE[i].nd[1].number ]=(tmpB.sigmaX*(tmpB.nd[1].y-tmpB.nd[2].y)-tmpB.sigmaXY*(tmpB.nd[1].x-tmpB.nd[2].x)+
                            tmpE.sigmaX*(tmpE.nd[3].y-tmpE.nd[0].y)-tmpE.sigmaXY*(tmpE.nd[3].x-tmpE.nd[0].x)+
                            tmpD.sigmaX*(tmpD.nd[2].y-tmpD.nd[1].y)-tmpD.sigmaXY*(tmpD.nd[2].x-tmpD.nd[1].x)+
                            pE[i].sigmaX*(pE[i].nd[0].y-pE[i].nd[3].y)-pE[i].sigmaXY*(pE[i].nd[0].x-pE[i].nd[3].x)
                            );
                    if((i-1)<0){
                        tmpF=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpF=pE[i-1];
                    }
                    if((i+nx)>=nx*ny){
                        tmpG=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpG=pE[i+nx];
                    }
                    if((i+1)>=nx*ny){
                        tmpH=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpH=pE[i+1];
                    }
                    if((i+nx-1)>=nx*ny){
                        tmpI=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpI=pE[i+nx-1];
                    }
                    if((i+nx+1)>=nx*ny){
                        tmpJ=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpJ=pE[i+nx+1];
                    }
                    Fx[pE[i].nd[2].number ]=(tmpF.sigmaX*(tmpF.nd[1].y-tmpF.nd[2].y)-tmpF.sigmaXY*(tmpF.nd[1].x-tmpF.nd[2].x)+
                            pE[i].sigmaX*(pE[i].nd[3].y-pE[i].nd[0].y)-pE[i].sigmaXY*(pE[i].nd[3].x-pE[i].nd[0].x)+
                            tmpG.sigmaX*(tmpG.nd[2].y-tmpG.nd[1].y)-tmpG.sigmaXY*(tmpG.nd[2].x-tmpG.nd[1].x)+
                            tmpI.sigmaX*(tmpI.nd[0].y-tmpI.nd[3].y)-tmpI.sigmaXY*(tmpI.nd[0].x-tmpI.nd[3].x)
                            );
                    Fx[pE[i].nd[3].number ]=(pE[i].sigmaX*(pE[i].nd[1].y-pE[i].nd[2].y)-pE[i].sigmaXY*(pE[i].nd[1].x-pE[i].nd[2].x)+
                            tmpH.sigmaX*(tmpH.nd[3].y-tmpH.nd[0].y)-tmpH.sigmaXY*(tmpH.nd[3].x-tmpH.nd[0].x)+
                            tmpJ.sigmaX*(tmpJ.nd[2].y-tmpJ.nd[1].y)-tmpJ.sigmaXY*(tmpJ.nd[2].x-tmpJ.nd[1].x)+
                            tmpG.sigmaX*(tmpG.nd[0].y-tmpG.nd[3].y)-tmpG.sigmaXY*(tmpG.nd[0].x-tmpG.nd[3].x)  
                            );   
                    
                    //节点y方向力
                    FDMElementTriangle_2D tmpyA=null,tmpyB=null,tmpyC=null,tmpyE=null,tmpyF=null,tmpyG=null,tmpyH=null,tmpyI=null,tmpyJ=null;
                    if((i-nx-1)<0)
                        tmpyA=(FDMElementTriangle_2D)pE[i].clone();
                    //tmpyA=pE[i-nx-1].
                    else{
                        tmpyA=pE[i-nx-1];
                    }
                    
                    if((i-nx)<0)
                        tmpyB=(FDMElementTriangle_2D)pE[i].clone();
                    else{
                        tmpyB=pE[i-nx];
                    }
                    
                    if((i-1)<0)
                        tmpyC=(FDMElementTriangle_2D)pE[i].clone();
                    else{
                        tmpyC=pE[i-1];
                    }
                    Fy[pE[i].nd[0].number ]=(tmpyA.sigmaXY*(tmpyA.nd[1].y-tmpyA.nd[2].y)-tmpyA.sigmaY*(tmpyA.nd[1].x-tmpyA.nd[2].x)+
                                                tmpyB.sigmaXY*(tmpyB.nd[3].y-tmpyB.nd[0].y)-tmpyB.sigmaY*(tmpyB.nd[3].x-tmpyB.nd[0].x)+
                                                pE[i].sigmaXY*(pE[i].nd[2].y-pE[i].nd[1].y)-pE[i].sigmaY*(pE[i].nd[2].x-pE[i].nd[1].x)+
                                                tmpyC.sigmaXY*(tmpyC.nd[0].y-tmpyC.nd[3].y)-tmpyC.sigmaY*(tmpyC.nd[0].x-tmpyC.nd[3].x)
                                                );
                    
                    if((i-nx+1)<0){
                        tmpyE=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpyE=pE[i-nx+1];
                    }
                    
                    //
                    if((i+1)>=nx*ny){
                        tmpyG=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpyG=pE[i+1];
                    }
                    if((i+nx)>=nx*ny){
                        tmpyH=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpyH=pE[i+nx];
                    }
                    if((i+nx-1)>=nx*ny){
                        tmpyI=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpyI=pE[i+nx-1];
                    }
                    if((i+nx+1)>=nx*ny){
                        tmpyJ=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpyJ=pE[i+nx+1];
                    }
                    Fy[pE[i].nd[1].number ]=(tmpyB.sigmaXY*(tmpyB.nd[1].y-tmpyB.nd[2].y)-tmpyB.sigmaY*(tmpyB.nd[1].x-tmpyB.nd[2].x)+
                            tmpyE.sigmaXY*(tmpyE.nd[3].y-tmpyE.nd[0].y)-tmpyE.sigmaY*(tmpyE.nd[3].x-tmpyE.nd[0].x)+
                            tmpyG.sigmaXY*(tmpyG.nd[2].y-tmpyG.nd[1].y)-tmpyG.sigmaY*(tmpyG.nd[2].x-tmpyG.nd[1].x)+
                            pE[i].sigmaXY*(pE[i].nd[0].y-pE[i].nd[3].y)-pE[i].sigmaY*(pE[i].nd[0].x-pE[i].nd[3].x)
                            );
                    if((i-1)<0){
                        tmpyF=(FDMElementTriangle_2D)pE[i].clone();
                    }
                    else{
                        tmpyF=pE[i-1];
                    }
                    Fy[pE[i].nd[2].number ]=(tmpyF.sigmaXY*(tmpyF.nd[1].y-tmpyF.nd[2].y)-tmpyF.sigmaY*(tmpyF.nd[1].x-tmpyF.nd[2].x)+
                            pE[i].sigmaXY*(pE[i].nd[3].y-pE[i].nd[0].y)-pE[i].sigmaY*(pE[i].nd[3].x-pE[i].nd[0].x)+
                            tmpyH.sigmaXY*(tmpyH.nd[2].y-tmpyH.nd[1].y)-tmpyH.sigmaY*(tmpyH.nd[2].x-tmpyH.nd[1].x)+
                            tmpyI.sigmaXY*(tmpyI.nd[0].y-tmpyI.nd[3].y)-tmpyI.sigmaY*(tmpyI.nd[0].x-tmpyI.nd[3].x)
                            );
                    Fy[pE[i].nd[3].number ]=(pE[i].sigmaXY*(pE[i].nd[1].y-pE[i].nd[2].y)-pE[i].sigmaY*(pE[i].nd[1].x-pE[i].nd[2].x)+
                            tmpyG.sigmaXY*(tmpyG.nd[3].y-tmpyG.nd[0].y)-tmpyG.sigmaY*(tmpyG.nd[3].x-tmpyG.nd[0].x)+
                            tmpyJ.sigmaXY*(tmpyJ.nd[2].y-tmpyJ.nd[1].y)-tmpyJ.sigmaY*(tmpyJ.nd[2].x-tmpyJ.nd[1].x)+
                            tmpyH.sigmaXY*(tmpyH.nd[0].y-tmpyH.nd[3].y)-tmpyH.sigmaY*(tmpyH.nd[0].x-tmpyH.nd[3].x)
                            );
                    
//                    total_accX[pE[i].nd[0].number]+=Fx[pE[i].nd[0].number ]/(rou*(Lx/nx));
//                    total_accY[pE[i].nd[0].number]+=Fy[pE[i].nd[0].number ]/(rou*(Ly/ny));
//                    
//                    total_accX[pE[i].nd[1].number]+=Fx[pE[i].nd[1].number ]/(rou*(Lx/nx));
//                    total_accY[pE[i].nd[1].number]+=Fy[pE[i].nd[1].number ]/(rou*(Ly/ny));
//                    
//                    total_accX[pE[i].nd[2].number]+=Fx[pE[i].nd[2].number ]/(rou*(Lx/nx));
//                    total_accY[pE[i].nd[2].number]+=Fy[pE[i].nd[2].number ]/(rou*(Ly/ny));
//                    
//                    total_accX[pE[i].nd[3].number]+=Fx[pE[i].nd[3].number ]/(rou*(Lx/nx));
//                    total_accY[pE[i].nd[3].number]+=Fy[pE[i].nd[3].number ]/(rou*(Ly/ny));
                    tmpA=null;
                    tmpB=null;
                    tmpC=null;
                    tmpE=null;
                    tmpF=null;
                     tmpyA=null;
                     tmpyB=null;
                     tmpyC=null;
                     tmpyE=null;
                     tmpyF=null;
                }

                for(int ii=0;ii<iNode;ii++)
                {        
                            
                    total_accX[ii]=Fx[ii]/(rou*(Lx*Ly/(nx*ny)))/2;
                    total_accY[ii]=Fy[ii]/(rou*(Lx*Ly/(ny*ny)))/2;
                    
                
                    total_velocityX[ii]=total_velocityX[ii]+total_accX[ii]*dataT;        
                    total_velocityY[ii]=total_velocityY[ii]+total_accY[ii]*dataT;    
                    
                    total_displacementX[ii]=total_displacementX[ii]+total_velocityX[ii]*dataT;
                    total_displacementY[ii]=total_displacementY[ii]+total_velocityY[ii]*dataT;
                        
                            
                            //if(step%3==0)
                            
                            System.out.println("节点编号:"+3+",y方向位移 :"+displacementX+"\t, y方向位移应力: "+(p)+"y方向加速度: "+acc);
                            
                            //Gauss(total_accX,Fx,iNode);
                            //total_accX[i]=-(p+Sy)/(rou*Lx);
                            
                            
                }
                
                
                if(step%8==0)
                System.out.println(total_displacementY[iNode-1]);

                    System.out.println("节点编号:"+iNode+"\t"+Fx[2*iNode-2]+"\t"+Fx[2*iNode-1]);
                    System.out.println(Fx[2*iNode-2]+"\t"+Fx[2*iNode-1]);

                
            }
            
        }
            catch(Exception e)
        {    
                e.printStackTrace();
            System.out.println("Error occured...\n");
        }
            
            return ;
        }

}    


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值