00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include <stdio.h>
00027 #include <stdlib.h>
00028 #include <string.h>
00029
00030 #include "drv.h"
00031 #include "fem.h"
00032 #include "load.h"
00033 #include "elm.h"
00034 #include "node.h"
00035 #include "alg.h"
00036 #include "rio.h"
00037 #include "nfi.h"
00038 #include "load.h"
00039 #include "xgplib.h"
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 static void RezoneNew ( sDriver ** );
00052 static void RezoneFree ( sDriver * );
00053 static int RezoneAnalysis (UI_State *);
00054 static int RezonePrintResult( int, double *, double * );
00055
00056
00057
00058
00059
00060 static void RezoneNew( sDriver **drv )
00061 {
00062
00063
00064 (*drv) = (sDriver *)calloc(1, sizeof(sDriver));
00065
00066
00067
00068 (*drv)->type = REZONE;
00069
00070 }
00071
00072
00073
00074
00075
00076 static void RezoneFree( sDriver *drv )
00077 {
00078
00079
00080 drv->data = 0L;
00081
00082 }
00083
00084
00085
00086
00087
00088
00089 static int RezoneAnalysis(UI_State *R)
00090 {
00091 int i, esc = 0;
00092 double *FVector = 0L;
00093 double *UVector = 0L;
00094 double *VVector = 0L;
00095 double *MVector = 0L;
00096
00097
00098
00099 FVector = (double *)calloc( NDof*NumNodes, sizeof(double) );
00100 UVector = (double *)calloc( NDof*NumNodes, sizeof(double) );
00101 VVector = (double *)calloc( NDof*NumNodes, sizeof(double) );
00102 MVector = (double *)calloc( NDof*NumNodes, sizeof(double) );
00103
00104
00105
00106 PrescribedValues( );
00107
00108
00109
00110 XGPBegin( );
00111
00112
00113
00114 while( esc < (NumRezones + 1) )
00115 {
00116
00117
00118 if( esc > 0 )
00119 printf( "\tProcess rezone step..................: %d\n", esc );
00120 else
00121 printf( "\tProcess first step without rezone....: %d\n", esc );
00122 fflush( stdout );
00123
00124
00125
00126 if( esc > 0 )
00127 DoRezone( esc, FVector );
00128
00129
00130
00131 if( !DRSolver(R, FVector, UVector, VVector, MVector, 0) ) return 0;
00132
00133
00134
00135 if( !IoStartSave( ) ) return 0;
00136
00137 fwrite( UVector, sizeof(double), NDof*NumNodes, ndlr );
00138 fflush( ndlr );
00139
00140 for( i = 0; i < NumElements; i++ )
00141 ElmWriteStress( ElmList[i], elmr, UVector, VVector );
00142 fflush( elmr );
00143
00144
00145
00146 esc++;
00147 }
00148
00149
00150
00151 XGPEnd( );
00152
00153
00154
00155 free( FVector );
00156 free( UVector );
00157 free( VVector );
00158 free( MVector );
00159
00160 return 1;
00161
00162 }
00163
00164
00165
00166
00167
00168 static int RezonePrintResult( int iteration, double *U, double *V )
00169 {
00170 return 1;
00171 }
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181
00182 void RezoneInit( void );
00183 void RezoneInit( void )
00184 {
00185
00186
00187 DrvClass[REZONE].new = RezoneNew;
00188 DrvClass[REZONE].free = RezoneFree;
00189 DrvClass[REZONE].analysis = RezoneAnalysis;
00190 DrvClass[REZONE].printres = RezonePrintResult;
00191
00192 }
00193
00194
00195
00196