def compute_total_current(the_field_sigma): laplace_solver = nfem2.laplace_solver( prematrix_laplace, # boundary conditions are defined on objects 4 and 6 dirichlet_bcs=[(-1, 4, laplace_dbc), (-1, 6, laplace_dbc)], mwe_mid=the_field_sigma) compute_div_J = nfem2.prematrix_applicator( prematrix_laplace, field_mid=the_field_sigma) cofield_drho_by_dt = nfem2.make_cofield(mwe_drho_by_dt) field_phi = laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) compute_J = nfem2.prematrix_applicator( prematrix_J, field_mid=the_field_sigma) field_J = nfem2.cofield_to_field(compute_J(field_phi)) cofield_div_J = compute_div_J(field_phi) field_div_J = nfem2.cofield_to_field(cofield_div_J) current = accumulate_J_total([0.0, 0.0, 0.0, 0.0], cofields=[cofield_div_J]) return current, field_phi, the_field_sigma, field_J
def update_sigma(the_field_sigma, i): compute_J = nfem2.prematrix_applicator(prematrix_J, field_mid=the_field_sigma) laplace_solver = nfem2.laplace_solver(prematrix_laplace, dirichlet_bcs=[(-1, 1, laplace_dbc)], mwe_mid=the_field_sigma) cofield_drho_by_dt = nfem2.make_cofield(mwe_drho_by_dt) # field_phi = laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) print "Before cofield_to_field -", time.time(), "\n" sys.stdout.flush() field_J = nfem2.cofield_to_field(compute_J(field_phi)) print "After cofield_to_field -", time.time(), "\n" sys.stdout.flush() #print "field_J contents:", nfem2.data_doftypes(field_J) # XXX NOTE: we should be able to make an applicator that does the # cofield_to_field conversion automatically! # # # Next, let us compute the new condictivity by site-wise operation on # field_J. We just overwrite field_sigma: # recompute_conductivity([sigma0, alpha], fields=[the_field_sigma, field_J, field_m]) print "Refcount field_sigma:", ocaml.sys_refcount(the_field_sigma) return the_field_sigma
def update_sigma(the_field_sigma, i): compute_J = nfem2.prematrix_applicator(prematrix_J, field_mid=the_field_sigma) laplace_solver = nfem2.laplace_solver( prematrix_laplace, dirichlet_bcs=[(-1, 1, laplace_dbc)], mwe_mid=the_field_sigma ) cofield_drho_by_dt = nfem2.make_cofield(mwe_drho_by_dt) # field_phi = laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) print "Before cofield_to_field -", time.time(), "\n" sys.stdout.flush() field_J = nfem2.cofield_to_field(compute_J(field_phi)) print "After cofield_to_field -", time.time(), "\n" sys.stdout.flush() # print "field_J contents:", nfem2.data_doftypes(field_J) # XXX NOTE: we should be able to make an applicator that does the # cofield_to_field conversion automatically! # # # Next, let us compute the new condictivity by site-wise operation on # field_J. We just overwrite field_sigma: # recompute_conductivity([sigma0, alpha], fields=[the_field_sigma, field_J, field_m]) print "Refcount field_sigma:", ocaml.sys_refcount(the_field_sigma) return the_field_sigma
def compute_total_current(the_field_sigma): laplace_solver=nfem2.laplace_solver(prematrix_laplace, # boundary conditions are defined on objects 4 and 6 dirichlet_bcs=[(-1,4,laplace_dbc),(-1,6,laplace_dbc)], mwe_mid=the_field_sigma) compute_div_J=nfem2.prematrix_applicator(prematrix_laplace, field_mid=the_field_sigma) cofield_drho_by_dt=nfem2.make_cofield(mwe_drho_by_dt) field_phi=laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) compute_J=nfem2.prematrix_applicator(prematrix_J, field_mid=the_field_sigma) field_J = nfem2.cofield_to_field(compute_J(field_phi)) cofield_div_J=compute_div_J(field_phi) field_div_J = nfem2.cofield_to_field(cofield_div_J) current = accumulate_J_total([0.0,0.0,0.0,0.0],cofields=[cofield_div_J]) return current, field_phi, the_field_sigma, field_J
def compute_total_current(the_field_sigma): laplace_solver = nfem2.laplace_solver( prematrix_laplace, dirichlet_bcs=[(-1, 1, laplace_dbc)], mwe_mid=the_field_sigma ) compute_div_J = nfem2.prematrix_applicator(prematrix_laplace, field_mid=the_field_sigma) cofield_drho_by_dt = nfem2.make_cofield(mwe_drho_by_dt) # make an empty field field_phi = laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) cofield_div_J = compute_div_J(field_phi) return accumulate_J_total([0.0, 0.0, 0.0, 0.0], cofields=[cofield_div_J])
def compute_total_current(the_field_sigma): laplace_solver=nfem2.laplace_solver(prematrix_laplace, dirichlet_bcs=[(-1,1,laplace_dbc)], mwe_mid=the_field_sigma) compute_div_J=nfem2.prematrix_applicator(prematrix_laplace, field_mid=the_field_sigma) cofield_drho_by_dt=nfem2.make_cofield(mwe_drho_by_dt) # make an empty field field_phi=laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) cofield_div_J=compute_div_J(field_phi) return accumulate_J_total([0.0,0.0,0.0,0.0],cofields=[cofield_div_J])
def update_sigma(the_field_sigma,i): compute_J=nfem2.prematrix_applicator(prematrix_J, field_mid=the_field_sigma) laplace_solver=nfem2.laplace_solver(prematrix_laplace, dirichlet_bcs=[(-1,4,laplace_dbc),(-1,6,laplace_dbc)], mwe_mid=the_field_sigma) cofield_drho_by_dt=nfem2.make_cofield(mwe_drho_by_dt) # field_phi = laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) field_J = nfem2.cofield_to_field(compute_J(field_phi)) # Next, let us compute the new condictivity by site-wise operation on # field_J. We just overwrite field_sigma: recompute_conductivity([sigma0_Py,sigma0_Au,alpha],fields=[the_field_sigma,field_J,field_m]) return the_field_sigma
def update_sigma(the_field_sigma, i): compute_J = nfem2.prematrix_applicator( prematrix_J, field_mid=the_field_sigma) laplace_solver = nfem2.laplace_solver( prematrix_laplace, dirichlet_bcs=[(-1, 4, laplace_dbc), (-1, 6, laplace_dbc)], mwe_mid=the_field_sigma) cofield_drho_by_dt = nfem2.make_cofield(mwe_drho_by_dt) # field_phi = laplace_solver(cofield_drho_by_dt, dbc_values=laplace_dbc_values) field_J = nfem2.cofield_to_field(compute_J(field_phi)) # Next, let us compute the new condictivity by site-wise operation on # field_J. We just overwrite field_sigma: recompute_conductivity( [sigma0_Py, sigma0_Au, alpha], fields=[the_field_sigma, field_J, field_m]) return the_field_sigma
def laplace_dbc(coords): if (abs(coords[1]) > (2.5 - 0.05)): return 1 else: return 0 def laplace_dbc_values(dof_name_indices, coords): if (coords[1] > 0.0): return 1.0 else: return -1.0 cofield_drho_by_dt = nfem2.make_cofield(mwe_drho_by_dt) prematrix_laplace = nfem2.prematrix(diffop_laplace, mwe_drho_by_dt, mwe_phi, mwe_mid=mwe_sigma) prematrix_J = nfem2.prematrix(diffop_J, mwe_J, mwe_phi, mwe_mid=mwe_sigma) # Note the ignore_jumps parameter: # we indeed ARE interested just in the # surface outflow of electrical current! code_recompute_conductivity = """ double len2_J, sprod_HJ, cos2; double len2_H=H_x*H_x+H_y*H_y;
# Dirichlet Boundary Conditions on our sample: def laplace_dbc(coords): if(abs(coords[1]) > (2.5-0.05)): return 1 else: return 0 def laplace_dbc_values(dof_name_indices,coords): if(coords[1] > 0.0): return 1.0 else: return -1.0 cofield_drho_by_dt=nfem2.make_cofield(mwe_drho_by_dt) prematrix_laplace=nfem2.prematrix(diffop_laplace, mwe_drho_by_dt,mwe_phi, mwe_mid=mwe_sigma) prematrix_J=nfem2.prematrix(diffop_J, mwe_J,mwe_phi, mwe_mid=mwe_sigma) # Note the ignore_jumps parameter: # we indeed ARE interested just in the # surface outflow of electrical current! code_recompute_conductivity="""