void _ConstitutiveMatrixCartesian_Init(
      ConstitutiveMatrixCartesian*                 self )
{
   self->rowSize = self->columnSize = StGermain_nSymmetricTensorVectorComponents( self->dim );
   self->Dtilda_B = Memory_Alloc_2DArray( double, self->rowSize, self->dim, (Name)"D~ times B matrix" );

   if( self->dim == 2 ) {
      self->_setValue = _ConstitutiveMatrixCartesian2D_SetValueInAllEntries;
      self->_setSecondViscosity = _ConstitutiveMatrixCartesian2D_SetSecondViscosity;
      self->_getViscosity = _ConstitutiveMatrixCartesian2D_GetIsotropicViscosity;
      self->_isotropicCorrection = _ConstitutiveMatrixCartesian2D_IsotropicCorrection;
      self->_assemble_D_B = _ConstitutiveMatrixCartesian2D_Assemble_D_B;
      self->_calculateStress = _ConstitutiveMatrixCartesian2D_CalculateStress;
   } else {
      self->_setValue = _ConstitutiveMatrixCartesian3D_SetValueInAllEntries;
      self->_setSecondViscosity = _ConstitutiveMatrixCartesian3D_SetSecondViscosity;
      self->_getViscosity = _ConstitutiveMatrixCartesian3D_GetIsotropicViscosity;
      self->_isotropicCorrection = _ConstitutiveMatrixCartesian3D_IsotropicCorrection;
      self->_assemble_D_B = _ConstitutiveMatrixCartesian3D_Assemble_D_B;
      self->_calculateStress = _ConstitutiveMatrixCartesian3D_CalculateStress;
   }

  /* store each particle's constitutiveMatrix */
  if( self->storeConstitutiveMatrix )
      assert(0);  // this has been deprecated.  check previous history if function is required.
      //ConstitutiveMatrixCartesian_SetupParticleStorage( self );

  // set to true here, if non isotropic rheologies are use they should switch this to be false automatically
  self->isDiagonal=True;
}
void _ViscousPenaltyConstMatrixCartesian_Init( 
		ViscousPenaltyConstMatrixCartesian*                   self,
		double                                         incompressibility_Penalty,
		Bool 	                                       viscosityWeighting )
{
	self->rowSize = self->columnSize = StGermain_nSymmetricTensorVectorComponents( self->dim );
	self->Dtilda_B = Memory_Alloc_2DArray( double, self->rowSize, self->dim, (Name)"D~ times B matrix" );

	if( self->dim == 2 ) {
		self->_setValue = _ViscousPenaltyConstMatrixCartesian2D_SetValueInAllEntries;
		self->_setSecondViscosity = _ViscousPenaltyConstMatrixCartesian2D_SetSecondViscosity;
		self->_getViscosity = _ViscousPenaltyConstMatrixCartesian2D_GetIsotropicViscosity;
		self->_isotropicCorrection = _ViscousPenaltyConstMatrixCartesian2D_IsotropicCorrection;
		self->_assemble_D_B = _ViscousPenaltyConstMatrixCartesian2D_Assemble_D_B;
		self->_calculateStress = _ViscousPenaltyConstMatrixCartesian2D_CalculateStress;
	} else {
		self->_setValue = _ViscousPenaltyConstMatrixCartesian3D_SetValueInAllEntries;
		self->_setSecondViscosity = _ViscousPenaltyConstMatrixCartesian3D_SetSecondViscosity;
		self->_getViscosity = _ViscousPenaltyConstMatrixCartesian3D_GetIsotropicViscosity;
		self->_isotropicCorrection = _ViscousPenaltyConstMatrixCartesian3D_IsotropicCorrection;
		self->_assemble_D_B = _ViscousPenaltyConstMatrixCartesian3D_Assemble_D_B;
		self->_calculateStress = _ViscousPenaltyConstMatrixCartesian3D_CalculateStress;
	}
	
	self->incompressibility_Penalty = incompressibility_Penalty;
	self->viscosityWeighting = viscosityWeighting;

  /* store each particle's constitutiveMatrix */
  if( self->storeConstitutiveMatrix ) 
		ViscousPenaltyConstMatrixCartesian_SetupParticleStorage( self );

}
void _SPR_StrainRate_Init( SPR_StrainRate* self ) {
   /* initialise the fieldComponent count here */
   self->fieldComponentCount = StGermain_nSymmetricTensorVectorComponents(self->dim);

   /* Setup basic pointers and functionPtrs that are specific to problem spec  */
   ContextEP_Append_AlwaysLast( self->context, "stokesEqn-execute", _SPR_StrainRate_Execute );

   NameOfPatch = self->name;
}