int deleteit( int L, int mm ) { int nnl,k; double temp,t1; nnl = L - nc; if ( L != mr) { /* re-arrange data when specie added or removed */ dsw(wt,mr,L); dsw(w,mr,L); dsw(ff,mr,L); dsw(initial_chem_pot,mr,L); if ( si[mr] == SINGLE ) dsw(fe,mr,L); swap2((int *)si,mr,L); dsw(fel,mr,L); swap2((int *)ic,nr,nnl); dsw(da,mr,L); /* this seems unnecessary */ swap2(ind,mr,L); rotate(index2, mr, L); for ( k = 1; k <= nc; k++) { t1 = sc[k][nr]; sc[k][nr] = sc[k][nnl]; sc[k][nnl] = t1; } for ( k = 1; k <= no_phases; k++) { temp = d_mole[k][nr]; d_mole[k][nr] = d_mole[k][nnl]; d_mole[k][nnl] = temp; } for ( k = 1; k <= ne; k++) { temp =bm[mr][k]; bm[mr][k] = bm[L][k]; bm[L][k] = temp; } } if (mm != 0) return (TRUE); /* ------- extra procedures when removing a species --------------- */ dsw(dg,nr,nnl); dsw(ds,mr,L); /* -------- special procedures for removing a phase --------------- */ tmole[si[mr]] -= w[mr]; nr--; /* one less reaction */ mr--; /* one less reaction */ if ( nr == 0 ) return ( FALSE ); else return ( TRUE ); }
static status_t openDataStoreWriter(const char* name, DataStoreWriterPtr& writer) { DataStore* ds = DataStore::instance(); if (NULL == ds) return DataStore::errNotFound; DataStoreWriterPtr dsw(new DataStoreWriter(*ds)); status_t error = dsw->open(name); if (errNone != error) return error; writer = dsw; return errNone; }
void SimpleDeferredDemo::renderPost() { // if(1) return; ADLASSERT( TILE_SIZE <= 16 ); int nClusterX = calcNumTiles(g_wWidth, CLUSTER_SIZE);//max2( 1, (g_wWidth/CLUSTER_SIZE)+(!(g_wWidth%CLUSTER_SIZE)?0:1) ); int nClusterY = calcNumTiles(g_wHeight, CLUSTER_SIZE);//max2( 1, (g_wHeight/CLUSTER_SIZE)+(!(g_wHeight%CLUSTER_SIZE)?0:1) ); // todo. define own constant buffer ConstantBuffer cb; { cb.m_world = XMMatrixIdentity(); cb.m_view = g_ViewTr; cb.m_projection = g_ProjectionTr; } { // clear lightIdxBuffer BufferInfo bInfo[] = { BufferInfo( &m_tileBuffer ) }; Launcher launcher( m_deviceData, &m_clearLightIdxKernel ); launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(Launcher::BufferInfo) ); // launcher.pushBackRW( m_tileBuffer ); launcher.launch1D( nClusterX*nClusterY*MAX_LIGHTS_PER_TILE_IN_32B ); } { // set lightIdxBuffer BufferInfo bInfo[] = { BufferInfo( &m_lightPosBuffer, true ), BufferInfo( &m_lightColorBuffer, true ), BufferInfo( &m_tileBuffer ) }; Launcher launcher( m_deviceData, &m_buildLightIdxKernel ); launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(Launcher::BufferInfo) ); // launcher.pushBackR( m_lightPosBuffer ); // launcher.pushBackR( m_lightColorBuffer ); // launcher.pushBackRW( m_tileBuffer ); launcher.setConst( g_constBuffer, cb ); launcher.launch1D( 64 ); } Stopwatch dsw( m_deviceData ); dsw.start(); { // run CS BufferDX11<int> cBuffer; cBuffer.m_srv = m_colorRT.m_srv; BufferDX11<int> pBuffer; pBuffer.m_srv = m_posRT.m_srv; BufferDX11<int> nBuffer; nBuffer.m_srv = m_normalRT.m_srv; BufferInfo bInfo[] = { BufferInfo( &m_lightPosBuffer, true ), BufferInfo( &m_lightColorBuffer, true ), BufferInfo( &cBuffer, true ), BufferInfo( &pBuffer, true ), BufferInfo( &nBuffer, true ), BufferInfo( &m_tileBuffer, true ), BufferInfo( &m_buffer ) }; Launcher launcher( m_deviceData, &m_kernel ); launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(Launcher::BufferInfo) ); // launcher.pushBackR( m_lightPosBuffer ); // launcher.pushBackR( m_lightColorBuffer ); // launcher.pushBackR( cBuffer ); // launcher.pushBackR( pBuffer ); // launcher.pushBackR( nBuffer ); // launcher.pushBackR( m_tileBuffer ); // launcher.pushBackRW( m_buffer ); launcher.setConst( g_constBuffer, cb ); launcher.launch2D( nClusterX*TILE_SIZE, nClusterY*TILE_SIZE, TILE_SIZE, TILE_SIZE ); } dsw.stop(); { m_nTxtLines = 0; sprintf_s(m_txtBuffer[m_nTxtLines++], LINE_CAPACITY, "%3.3fms", dsw.getMs()); } // DeviceDX11* dd = (DeviceDX11*)m_deviceData; ID3D11RenderTargetView* pOrigRTV = NULL; ID3D11DepthStencilView* pOrigDSV = NULL; dd->m_context->OMGetRenderTargets( 1, &pOrigRTV, &pOrigDSV ); // release for the renderPre pOrigRTV->Release(); pOrigDSV->Release(); { float ClearColor[4] = { 0.f, 0.f, 0.f, 1.0f }; ID3D11RenderTargetView* aRTViews[ 1 ] = { pOrigRTV }; dd->m_context->OMSetRenderTargets( 1, aRTViews, pOrigDSV ); dd->m_context->ClearDepthStencilView( pOrigDSV, D3D11_CLEAR_DEPTH, 1.0f, 0 ); dd->m_context->ClearRenderTargetView( pOrigRTV, ClearColor ); dd->m_context->PSSetShaderResources( 0, 1, ((BufferDX11<float4>*)&m_buffer)->getSRVPtr() ); // render to screen renderFullQuad( m_deviceData, &g_bufferToRTPixelShader, make_float4((float)g_wWidth, (float)g_wHeight, 0,0 ) ); ID3D11ShaderResourceView* ppSRVNULL[16] = { 0 }; dd->m_context->PSSetShaderResources( 0, 1, ppSRVNULL ); } pOrigRTV->Release(); pOrigDSV->Release(); g_defaultVertexShader = m_gVShader; g_defaultPixelShader = m_gPShader; }
/* -------- Chooses optimum basis, calculates stoichiometry ---------- */ void basopt(int FIRST) { int k,jr,jl,i,j,L,ip1; double temp,r; CONV = FALSE; nopt++; for (i = 1; i <= mr; i++) aw[i] = w[i]; for (jr = 1; jr <= nc; jr++) { do { k = amax(aw,jr,mr); if ( aw[k] == 0.0 ) { CONV = TRUE; /* the biggest specie is zero */ return; } if ( aw[k] == TEST ) { nc = jr - 1; n = m - nc; nr = n; for (i = 1; i <= m; i++) ir[i] = nc + i; } aw[k] = TEST; /* ----- check linear independence with previous species --- */ /* ----- logical function lindep(bm,jr,k,nc) ------ */ jl = jr - 1; sa[jr] = 0.0; for (j = 1; j <= nc; j++) sm[j][jr] = bm[k][j]; if ( jl != 0 ) { for (j = 1; j <= jl; j++) { ss[j] = 0.0; for (i = 1; i <= nc; i++) ss[j] += sm[i][jr]*sm[i][j]; ss[j] = ss[j]/sa[j]; } for (j = 1; j <= jl; j++) for (L = 1; L <= nc; L++) sm[L][jr] -= ss[j]*sm[L][j]; } for (j = 1; j <= nc; j++) if ( fabs(sm[j][jr]) > 1e-17 ) sa[jr] += sm[j][jr]*sm[j][jr]; } while ( sa[jr] < 1e-6); /* ----- rearrange data ---------- */ dsw(w,jr,k); dsw(wt,jr,k); dsw(ff,jr,k); dsw(initial_chem_pot,jr,k); dsw(fe,jr,k); dsw(aw,jr,k); swap2((int *)si,jr,k); dsw(da,jr,k); dsw(fel,jr,k); swap2(ind,jr,k); rotate(index2, jr, k); for(j = 1; j <= ne; j++) { temp = bm[jr][j]; bm[jr][j] = bm[k][j]; bm[k][j] = temp; } } if ( FIRST ) return; /* ----- evaluate stoichiometric matrix, when FIRST = FALSE ------- */ for (j = 1; j <= nc; j++) { /* Transform bm[] into sm[] */ for (i = 1; i <= nc; i++) sm[i][j] = bm[j][i]; } #ifdef DEBUG fprintf(debug_prn_file,"\nData for bm[i,j] to use in mlequ() in 'basopt(FALSE)'\n"); for (i = 1; i <= m; i++) { for (j = 1; j <= ne; j++) fprintf(debug_prn_file,"%4.2g ",bm[i][j]); fprintf(debug_prn_file,"\n"); } fprintf(debug_prn_file,"\nData for sm[i,j] (Transformed bm[i,j])'\n"); for (i = 1; i <= ne; i++) { for (j = 1; j <= m; j++) fprintf(debug_prn_file,"%4.2g ",sm[i][j]); fprintf(debug_prn_file,"\n"); } #endif for (i = 1; i <= n; i++) { /* Transform bm[] into stoich.coeff.matr sc[] */ for(j = 1; j <= nc; j++) sc[j][i] = bm[ir[i]][j]; } #ifdef DEBUG fprintf(debug_prn_file,"\nData for sc[i,j] to use in mlequ() in 'basopt(FALSE)'\n"); for (i = 1; i <= nc; i++) { for (j = 1; j <= n; j++) fprintf(debug_prn_file,"%4.2g ",sc[i][j]); fprintf(debug_prn_file,"\n"); } #endif /* ------- mlequ() --------- */ /* ------ calculates stoichiometric matrix (reactions) -------- */ for ( i = 1; i <= nc; i++) { if ( sm[i][i] == 0.0 ) { ip1 = i+1; for (k = ip1; k <= nc; k++) if (sm[k][i] != 0.0 ) goto JUMP; #ifdef DEBUG fprintf(debug_prn_file,"\nData for sm[i,j] of mlequ() in 'basopt(FALSE)'\n"); for (jr = 1; jr <= ne; jr++) { for (j = 1; j <= m; j++) fprintf(debug_prn_file,"%4.2g ",sm[jr][j]); fprintf(debug_prn_file,"\n newline \n"); } #endif strcpy( error, "\n No unique solution - Number of components < Number of elements.\nAborting VCS solver ...."); longjmp( e_buf, 1 ); JUMP: for (j = i; j <= nc; j++) sm[i][j] += sm[k][j]; for (j = 1; j <= n; j++) sc[i][j] += sc[k][j]; } for (L = 1; L <= nc; L++) { if ( L == i || sm[L][i] == 0.0 ) { } else { r = sm[L][i]/sm[i][i]; for (j = i; j <= nc; j++) sm[L][j] -= sm[i][j]*r; for (j = 1; j <= n; j++) sc[L][j] -= sc[i][j]*r; } } } for (i = 1; i <= nc; i++) for (j = 1; j <= n; j++) sc[i][j] = -sc[i][j]/sm[i][i]; #ifdef DEBUG fprintf(debug_prn_file,"\nStoichiometric matrix sc[i][j]\n\n"); for (i = 1; i <= nc; i++) { for (j = 1; j <= n; j++) fprintf(debug_prn_file,"%4.2g ",sc[i][j]); fprintf(debug_prn_file,"\n"); } #endif /* ------ end of mlequ -------- */ for ( i = 1; i <= n; i++) { k = ir[i]; for (j = 0; j <= no_phases; j++) d_mole[j][i] = 0.0; if (si[k] != SINGLE) d_mole[si[k]][i] = 1.0; for ( j = 1; j <= nc; j++) { if ( fabs(sc[j][i]) <= 1e-6 ) sc[j][i] = 0.0; if ( si[j] != SINGLE ) d_mole[si[j]][i] += sc[j][i]; } } }