示例#1
0
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;
}
示例#3
0
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;
}
示例#4
0
/* -------- 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];
    }
  }
}