Skip to content
  • Search
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse

ZMT zurich med tech

  1. Home
  2. Sim4Life
  3. Simulations & Solvers
  4. Material anisotropy along a curve?

Material anisotropy along a curve?

Scheduled Pinned Locked Moved Simulations & Solvers
4 Posts 4 Posters 2.0k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • J Offline
    J Offline
    JKM
    wrote on last edited by
    #1

    Hello,
    For an electro ohmic quasi-static simulation, there is a check mark to specify a material setting as anisotropic, which will enable fields to enter conductivity on and off the diagonal of xx/yy/zz. As far as I understand it, this works well for a geometry with a fixed orientation/axis, but is there a way to specify the anisotropy with respect to a spline used to create the geometry (such as for muscles or nerves)? One might imagine this as using a local coordinate system rather than the global coordinate system.
    Thank you for the help

    1 Reply Last reply
    0
    • T Offline
      T Offline
      tcs
      wrote on last edited by
      #2

      I have a similar requirement at the moment. Did you get anywhere with it?

      1 Reply Last reply
      0
      • brynB Offline
        brynB Offline
        bryn
        ZMT
        wrote on last edited by
        #3

        For this you would need to use the homogeneous anisotropic conductivity. The easiest way to use that feature I think, may be to create the field distribution in Python as a FloatFieldData on a RectilinearGrid and add this to the Analysis tree via the "TrivialProducer". You can then select the anisotropic conductivity from the Analysis pipeline.

        Anisotropic conductivity distributions along a spline are sometimes computed by solving a Poisson equation in a tube, with Dirichlet boundary conditions at the top and bottom. This gives a main direction for the anisotropic tensor along the spline. You can create a tube from a spline using the "Thicken Wire" tool (or in Python: XCoreModeling.ThickenWire).

        Since this seems to be an important question, maybe somebody who has a working script to assign homogeneous anisotropic conductivities can share it here as a reference.

        M 1 Reply Last reply
        0
        • brynB bryn

          For this you would need to use the homogeneous anisotropic conductivity. The easiest way to use that feature I think, may be to create the field distribution in Python as a FloatFieldData on a RectilinearGrid and add this to the Analysis tree via the "TrivialProducer". You can then select the anisotropic conductivity from the Analysis pipeline.

          Anisotropic conductivity distributions along a spline are sometimes computed by solving a Poisson equation in a tube, with Dirichlet boundary conditions at the top and bottom. This gives a main direction for the anisotropic tensor along the spline. You can create a tube from a spline using the "Thicken Wire" tool (or in Python: XCoreModeling.ThickenWire).

          Since this seems to be an important question, maybe somebody who has a working script to assign homogeneous anisotropic conductivities can share it here as a reference.

          M Offline
          M Offline
          montanaro
          wrote on last edited by montanaro
          #4

          Something to get started to create an anisotropic conductivity tensor for S4L from solving a Poisson equation with boundary conditions (running an EM simulation and using its potential). Once the field is created in the analysis tab it can be used as a part of a new EM simulation for any material selected to have inhomogeneous and anisotropic properties.

          import numpy as np
          import s4l_v1.document as document
          import s4l_v1.model as model
          import s4l_v1.simulation.emlf as emlf
          from s4l_v1 import ReleaseVersion, Unit
          from s4l_v1.model import Vec3, Translation, Rotation
          import s4l_v1.units as units
          import s4l_v1.analysis as analysis
          import XCoreModeling
          
          def CreateMockAnisotropicConductivity(sim):
          	# Transversal and longitudinal sigmas
          	sigma1 = 3.0
          	sigma2 = 1.0
          
          	# here conductivity has 6 component (anisotropic tensor)
          	results = sim.Results()
          	p = results["Overall Field"].Outputs["EM Potential(x,y,z,f0)"]
          	p.Update()
          	e = results["Overall Field"].Outputs["EM E(x,y,z,f0)"]
          	e.Update()
          
          	e_field = e.Data.Field(0)
          	nc = e.Data.Grid.NumberOfCells
          	print "E Field shape", e_field.shape
          	print "Number of Cells", nc
          	# E Field shape (nc, 3) - Cell centered
          
          	# Calculate sigma on cell centers
          	print "Calculate anisotropic sigma values"
          	sigma_wm = np.zeros([nc,6]) # 6 unique values
          	# tensor component indexing for solver
          	iu3 = (np.array([0, 1, 2, 0, 1, 0], dtype=np.int64), np.array([0, 1, 2, 1, 2, 2], dtype=np.int64))
          	for idx, val in enumerate(e_field):
          		tmp = np.zeros([3,3], dtype=np.complex)
          		tmp[0] = val	
          		if (not np.isnan(val).any() and np.inner(val, val) != 0):
          			P = np.dot(tmp.T, tmp) / np.inner(val,val)
          		else:
          			P = np.full((3, 3), 0, dtype=np.complex)
          		sigma_tensor = sigma1*P + sigma2*( np.identity(P.shape[0]) - P ) 
          		sigma_wm[idx] = sigma_tensor[iu3].real
          	
          	sigma_swapped = sigma_wm[:,[0,1,2,3,5,4]] # Fix bug where yz and xz were swapped
          	
          	tensor_conductivity = analysis.core.DoubleFieldData()
          	tensor_conductivity.NumberOfSnapshots = 1
          	tensor_conductivity.NumberOfComponents = 6
          	tensor_conductivity.Grid = e.Data.Grid.Clone()
          	tensor_conductivity.ValueLocation = analysis.core.eValueLocation.kCellCenter
          	tensor_conductivity.SetField(0, sigma_swapped) #sigma_wm) # Fix bug where yz and xz were swapped
          	tensor_conductivity.Quantity.Name = 'Anisotropic Conductivity From E Field'
          	tensor_conductivity.Quantity.Unit = analysis.core.Unit('S/m')
          	
          	producer_t = analysis.core.TrivialProducer()
          	producer_t.SetDataObject(tensor_conductivity)
          	producer_t.Name = 'Anisotropic Conductivity'
          	document.AllAlgorithms.Add(producer_t)
          
          1 Reply Last reply
          0

          Hello! It looks like you're interested in this conversation, but you don't have an account yet.

          Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

          With your input, this post could be even better 💗

          Register Login
          Reply
          • Reply as topic
          Log in to reply
          • Oldest to Newest
          • Newest to Oldest
          • Most Votes


          • Login

          • Don't have an account? Register

          • Login or register to search.
          • First post
            Last post
          0
          • Search