[cig-commits] r12813 - mc/3D/CitcomS/trunk/lib
tan2 at geodynamics.org
tan2 at geodynamics.org
Thu Sep 4 15:46:39 PDT 2008
Author: tan2
Date: 2008-09-04 15:46:39 -0700 (Thu, 04 Sep 2008)
New Revision: 12813
Modified:
mc/3D/CitcomS/trunk/lib/Viscosity_structures.c
Log:
multi-component chemical viscosity
Modified: mc/3D/CitcomS/trunk/lib/Viscosity_structures.c
===================================================================
--- mc/3D/CitcomS/trunk/lib/Viscosity_structures.c 2008-09-04 22:39:09 UTC (rev 12812)
+++ mc/3D/CitcomS/trunk/lib/Viscosity_structures.c 2008-09-04 22:46:39 UTC (rev 12813)
@@ -783,40 +783,48 @@
struct All_variables *E;
float **EEta;
{
- float comp,comp_fac,CC[9],tcomp;
- double vmean,cc_loc;
- int m,l,z,jj,kk,i;
+ double vmean,cc_loc[10],CC[10][9],cbackground;
+ int m,l,z,jj,kk,i,p,q;
const int vpts = vpoints[E->mesh.nsd];
const int nel = E->lmesh.nel;
const int ends = enodes[E->mesh.nsd];
- if(E->trace.nflavors != 2)
- myerror(E,"sorry, CDEPV only supports two flavors");
- if(E->composition.ncomp != 1)
- myerror(E,"CDEPV only supports one composition yet");
for(m=1;m <= E->sphere.caps_per_proc;m++) {
for(i = 1; i <= nel; i++){
/* determine composition of each of the nodes of the
element */
- for(kk = 1; kk <= ends; kk++){
- CC[kk] = E->composition.comp_node[m][0][E->ien[m][i].node[kk]];
- if(CC[kk] < 0)CC[kk]=0.0;
- if(CC[kk] > 1)CC[kk]=1.0;
- }
- for(jj = 1; jj <= vpts; jj++){
- /* compute mean composition */
- cc_loc = 0.0;
- for(kk = 1; kk <= ends; kk++)
- cc_loc += CC[kk] * E->N.vpt[GNVINDEX(kk, jj)];
+ for(p=0; p<E->composition.ncomp; p++) {
+ for(kk = 1; kk <= ends; kk++){
+ CC[p][kk] = E->composition.comp_node[m][p][E->ien[m][i].node[kk]];
+ if(CC[p][kk] < 0)CC[p][kk]=0.0;
+ if(CC[p][kk] > 1)CC[p][kk]=1.0;
+ }
+ }
+ for(jj = 1; jj <= vpts; jj++) {
+ /* concentration of background material */
+ cbackground = 1;
+ for(p=0; p<E->composition.ncomp; p++) {
+ /* compute mean composition */
+ cc_loc[p] = 0.0;
+ for(kk = 1; kk <= ends; kk++) {
+ cc_loc[p] += CC[p][kk] * E->N.vpt[GNVINDEX(kk, jj)];
+ }
+ cbackground -= cc_loc[p];
+ }
- /* geometric mean of viscosity */
- vmean = exp(cc_loc * E->viscosity.cdepv_ff[1] +
- (1.0-cc_loc) * E->viscosity.cdepv_ff[0]);
- /* multiply the viscosity with this prefactor */
- EEta[m][ (i-1)*vpts + jj ] *= vmean;
- } /* end jj loop */
+ /* geometric mean of viscosity */
+ vmean = cbackground * E->viscosity.cdepv_ff[0];
+ for(p=0; p<E->composition.ncomp; p++) {
+ vmean += cc_loc[p] * E->viscosity.cdepv_ff[p+1];
+ }
+ vmean = exp(vmean);
+
+ /* multiply the viscosity with this prefactor */
+ EEta[m][ (i-1)*vpts + jj ] *= vmean;
+
+ } /* end jj loop */
} /* end el loop */
} /* end cap */
}
More information about the cig-commits
mailing list