コード例 #1
0
ファイル: termsLinElasticity.c プロジェクト: taldcroft/sfepy
/*!
  @par Revision history:
  - 30.07.2007, from dw_hdpm_cache()
*/
int32 dq_cauchy_strain( FMField *out, FMField *state, int32 offset,
			VolumeGeometry *vg,
			int32 *conn, int32 nEl, int32 nEP )
{
  int32 ii, dim, sym, nQP, ret = RET_OK;
  FMField *st = 0, *disG = 0;

  state->val = FMF_PtrFirst( state ) + offset;

  nQP = vg->bfGM->nLev;
  dim = vg->bfGM->nRow;

  sym = (dim + 1) * dim / 2;
  fmf_createAlloc( &st, 1, 1, nEP, dim );
  fmf_createAlloc( &disG, 1, nQP, dim, dim );

  for (ii = 0; ii < nEl; ii++) {
    FMF_SetCell( out, ii );
    FMF_SetCell( vg->bfGM, ii );

    ele_extractNodalValuesNBN( st, state, conn + nEP * ii );
    fmf_mulAB_n1( disG, vg->bfGM, st );
    form_sdcc_strainCauchy_VS( out, disG );
/*       fmf_print( out, stdout, 0 ); */
/*       sys_pause(); */
    ERR_CheckGo( ret );
  }

 end_label:
  fmf_freeDestroy( &st ); 
  fmf_freeDestroy( &disG ); 

  return( ret );
}
コード例 #2
0
ファイル: termsLaplace.c プロジェクト: olivierverdier/sfepy
/*!
  Diffusion velocity.
  @par Revision history:
  - c: 07.09.2006, r: 06.05.2008
*/
int32 de_diffusion_velocity( FMField *out, FMField *state, int32 offset,
			     FMField *mtxD, VolumeGeometry *vg,
			     int32 *conn, int32 nEl, int32 nEP,
			     int32 *elList, int32 elList_nRow )
{
  int32 ii, iel, dim, nQP, ret = RET_OK;
  FMField *st = 0, *gp = 0, *dgp = 0;

  nQP = vg->bfGM->nLev;
  dim = vg->bfGM->nRow;

/*   output( "%d %d %d %d %d %d\n", offset, nEl, nEP, nQP, dim, elList_nRow ); */
  state->val = FMF_PtrFirst( state ) + offset;

  fmf_createAlloc( &st, 1, 1, nEP, 1 );
  fmf_createAlloc( &gp, 1, nQP, dim, 1 );
  fmf_createAlloc( &dgp, 1, nQP, dim, 1 );

  for (ii = 0; ii < elList_nRow; ii++) {
    iel = elList[ii];

    FMF_SetCell( out, ii );
    FMF_SetCell( vg->bfGM, iel );
    FMF_SetCell( vg->det, iel );
    if (mtxD->nCell > 1) {
      FMF_SetCell( mtxD, ii );
    }

    ele_extractNodalValuesNBN( st, state, conn + nEP * iel );
    fmf_mulAB_n1( gp, vg->bfGM, st );
    fmf_mulAB_nn( dgp, mtxD, gp );
    fmf_sumLevelsMulF( out, dgp, vg->det->val );
    ERR_CheckGo( ret );
  }
  fmfc_mulC( out, -1.0 );

 end_label:
  fmf_freeDestroy( &st ); 
  fmf_freeDestroy( &gp ); 
  fmf_freeDestroy( &dgp ); 

  return( ret );
}
コード例 #3
0
ファイル: termsLaplace.c プロジェクト: olivierverdier/sfepy
/*!
  @par Revision history:
  - 28.11.2005, c
  - 09.12.2005
*/
int32 dw_laplace( FMField *out, FMField *state, int32 offset,
		  FMField *coef, VolumeGeometry *vg,
		  int32 *conn, int32 nEl, int32 nEP,
		  int32 *elList, int32 elList_nRow,
		  int32 isDiff )
{
  int32 ii, iel, dim, nQP, ret = RET_OK;
  FMField *st = 0, *gtg = 0, *gu = 0, *gtgu = 0;

  nQP = vg->bfGM->nLev;
  dim = vg->bfGM->nRow;

/*   output( "%d %d %d %d %d %d\n", offset, nEl, nEP, nQP, dim, elList_nRow ); */

  state->val = FMF_PtrFirst( state ) + offset;

  if (isDiff) {
    fmf_createAlloc( &gtg, 1, nQP, nEP, nEP );
  } else {
    fmf_createAlloc( &st, 1, 1, nEP, 1 );
    fmf_createAlloc( &gu, 1, nQP, dim, 1 );
    fmf_createAlloc( &gtgu, 1, nQP, nEP, 1 );
  }

  for (ii = 0; ii < elList_nRow; ii++) {
    iel = elList[ii];

/*     output( "%d %d\n", ii, iel ); */
    FMF_SetCell( out, ii );
    FMF_SetCell( coef, ii );
    FMF_SetCell( vg->bfGM, iel );
    FMF_SetCell( vg->det, iel );

/*     fmf_print( coef, stdout, 0 ); */
/*     fmf_print( vg->bfGM, stdout, 0 ); */
/*     fmf_print( vg->det, stdout, 0 ); */

    if (isDiff) {
      laplace_build_gtg( gtg, vg->bfGM );
      fmf_mulAF( gtg, gtg, coef->val );
      fmf_sumLevelsMulF( out, gtg, vg->det->val );
/*       fmf_print( out, stdout, 0 ); */
/*       sys_pause(); */
    } else {
      ele_extractNodalValuesNBN( st, state, conn + nEP * iel );
/*       build_gtg( gtg, vg->bfGM ); ERR_CheckGo( ret ); */
/*       fmf_mulAB_n1( gtgu, gtg, stv ); */
/*       fmf_print( gtgu, stdout, 0 ); */

      laplace_act_g_m( gu, vg->bfGM, st );
      laplace_act_gt_m( gtgu, vg->bfGM, gu );
      fmf_mulAF( gtgu, gtgu, coef->val );
      fmf_sumLevelsMulF( out, gtgu, vg->det->val );

/*       fmf_print( stv, stdout, 0 ); */
/*       fmf_print( gu, stdout, 0 ); */
/*       fmf_print( gtgu, stdout, 0 ); */
/*       fmf_print( out, stdout, 0 ); */
/*       sys_pause(); */
    }
    ERR_CheckGo( ret );
  }

 end_label:
  if (isDiff) {
    fmf_freeDestroy( &gtg ); 
  } else {
    fmf_freeDestroy( &st ); 
    fmf_freeDestroy( &gu ); 
    fmf_freeDestroy( &gtgu ); 
  }

  return( ret );
}